Generally, the value of the obj attribute should be $obj (which is the default if the attribute is left out), because this is safe and will be quickly understood by other MIC-coders by convention. Also, other names may overrun special variables or global variables. Thus, this convention also mandates that no global variable called $obj is created within a pile. (Note that $obj is used in the text to refer to that thing in code samples and in documentation.)
If there are nested groups, then a scheme such as $obj1, $obj2, etc. is preferred. If, however, this is unclear (especially if multiple objs are accessed in MICdefines which are members of nested groups, one could more reasonably consider more descriptive names. Nested names, however, must be unique within a fieldspace. No guarantee is made on what will happen if these names clash.
The value of numvar should generally be set to $index for the same reasons. $index is the default that will be used if the attribute is left out.
Within the MICgroup (and nested MICgroup's), all MICdefine initialization code will have $obj and $index made available to it. While $index is set by MIC code, $obj must be set by the MIC-coder in the group setup code.