Корректно, но он приводит к расходу лишней памяти. В варианте 1 у каждого экземпляра будет свой метод (т.е. в памяти это будут разные функции). В варианте 2 метод будет один на всех.
Вариант 1 обычно применяется если нужно захватить в замыкание переменные и действительно создавать разные функции. Если такой необходимости нет, следует использовать вариант 2.
Есть ещё вариант 3:
function sayGreet() {return "Hello, " + this.greeting;};
...
sayGreet.apply(greeter);
Если делать это в замыкании (например require) то получится private метод.
Рекомендую прочесть javascript: good parts. Недавно прочёл по совету коллег,очень многое разложилось по полочкам в голове, хотя до этого писал на js прилично.