Simplified the API by ensuring that callbacks are always called.
Callbacks will be called when the required rule is present if they are preceded by a !.