As mentioned briefly in the MICdefine reference, the function of the $obj object should be well understood to prevent odd errors. As described before, $obj is tied with the creation of fields and dummy fields. It is important to note in the field setup code, however, that one may never rely on the existence of $obj or $index.
At first, this may seem counter-intuitive; one might expect $obj, etc. to always be present under certain circumstances if one is using a non-dummy fieldspace. The reason that one cannot depend on this is because if a member of a group is changed and the other's get carried along, then the changed member will obviously get its value from the user data and not from the default data, but the other members will also be filled from the value that they had at the time that the changed field was changed. Thus, the default code will be circumvented for the sake of efficiency.