If you wanted to make the above more flexable, you could add an assert_rule method too, which would act a bit like the addRule method in the ApplicaitonController thread. I do think though that using an object where a boolean works is overkill and leads to bloated code, so should be treated as the exception rather than the rule.
But without affecting other code, it could look like this:
function assert_rule ( $field, $rule, $message = 'Invalid' )
if (!isset($this->_errors[$field]) && !$rule->passes())
$this->_errors[$field] = $message;
A case where you might like to have the extra flexibility would be if you wanted to test to see if a username was unique, but you consider the database call to be expensive, so you only want to actually test it if the username is otherwise valid. Using objects is our best tool IMO when we don't have easy access to use anonymous functions.