1) если функция вызывается обычным способом, не как метод, то this получает значение глобального объекта (или undefined в строгом режиме) - это правильное поведение согласно спецификации.
2) этот код можно сократить:
var f=callback.bind(this);
method(a, b, f);