Almost there.
You passed an anonymous function to $parsers and $formatters array:
modelCtrl.$formatters.push(function(value) {
validator(value);
});
Inside the anonymous function you are making a call to your validator function, but you're not returning the result.
To remedy, return the function result as in:
modelCtrl.$formatters.push(function(value) {
return validator(value);
});
modelCtrl.$parsers.push(function(value) {
return validator(value);
});
To simplify your code you might want to use the function name directly as a variable reference (no need for anonymous function):
modelCtrl.$formatters.push(validator);
modelCtrl.$parsers.push(validator);
PLUNKER