Better way to check required fields when no input

This enables lazy default value evaluation, so convert can be skipped
on init when no data is given. Also fixes not-validated models being
interpreted as False because `__len__` only accounted for `_data`.
Restore parameter to pass extra data to validate