def clean(self, value):
        """ Clean the data and validate the nested spec.

        Implementation is the same as for other fields but in addition,
        this will propagate the validation to the nested spec.
        """

        obj = self.factory.create(value)

        # todo: what if the field defines properties that have any of
        # these names:
        if obj:
            del obj.fields
            del obj.alias
            del obj.validators
            del obj.required
            del obj.factory

        # do own cleaning first...
        self._validate_existence(obj)
        self._run_validators(obj)

        # ret = {}
        # for name in self.fields.keys():
        #     ret[name] = getattr(obj, name)
        # return ret
        return obj
Clean the data and validate the nested spec.

        Implementation is the same as for other fields but in addition,
        this will propagate the validation to the nested spec.