I think this might need to be 

``` coffee
  if not obj[key]
    return (if spec.optional then null else {path: fullPath, error: 'required'})
  else
    return validateHierarchy fullPath, obj[key], spec.schema

you only want to return null for an optional object if it doesn't exist
```