There are a few issues with the Util.applyDefaults function.
1. Since toString is always non-null, it doesn't correctly apply a custom toString property from one object to another.
2. Though the docs say "copies any keys that don't exist from another hashtable," an object with a property set to null will be clobbered. I think checking if a property is undefined is closer to checking whether or not it exists (hasOwnProperty doesn't work in Safari).
3. IE (still) doesn't iterate over the toString property of an object. This means we've got to explicitly check for this property (using hasOwnProperty) to apply any custom value from one object to another.