     , Object.create(null))
     return rv
 
+
+# Public: Validate an Object by running the validation functions defined for
+# each property on this Model.
+#
+# aObject - The Object to validate.
+#
+# Returns an Object whoes own properties are the keys of the properties on the
+# given aObject which did not pass validation. If all the properties on aObject
+# pass validation then returns null.
 Model.validate = (aObject) ->
     errors = Object.create(null)
     defs = @definitions


    defs = @definitions
    rv = Object.keys(defs).reduce((rv, key) ->
        if Object::hasOwnProperty.call(aObject, key)
            rv[key] = aObject[key]
        return rv
    , Object.create(null))
    return rv

Model.coerce = (aObject) ->
    if Object(aObject) isnt aObject
        msg = "Model::coerce(aObject) expects an Object as the single parameter."


    return create


# Public: Create an Object which only contains the properties which are defined
# by this Model.
#
# aObject - The source Object.
#
# Returns a new Object with own, enumerable properties defined from aSource.
# The only Properties which will be defined on the new Object are those that
# are defined by this Model *and* exist on the source object (aObject).
Model.clean = (aObject) ->
    if Object(aObject) isnt aObject
        msg = "Model::clean(aObject) expects an Object as the single parameter."
