Hmm, when I use something like this

```objective-c
- (BOOL)validateWithError:(NSError **)error {
	for (NSString *key in self.dictionaryValue) {
		BOOL success = MTLValidateAndSetValue(self, key, self.dictionaryValue[key], NO, error);

		if (!success) return NO;
	}

	return YES;
}
```

then my spec's `-[MTLValidationModel validateName:error:]` is called with an NSNull instead of a nil.

I feel like this is going to catch a lot of users by surprise, since you may not have a single NSNull in your code base, yet suddenly you have to validate all your properties against it.

Now the next logical step would be, as you said, not to expect nil and NSNull to mean something different. However, I think that

```objective-c
id value = self.dictionaryValue[key];

if (value == NSNull.null) value = nil;
```

defeats the purpose of using a dictionary as an intermediate representation. Avoiding NSNull altogether and therefore not using `-dictionaryValue` seems like the simplest solution to me.

Just wanted to point that out, mind the `if (value == NSNull.null) value = nil;` version if you think that's the way to go.
(You suggested that for performance reasons, right?)