I have to say that i'm amazed by multigroup it is an awesome module but I see some problems that could eventually make our life easier or I'm missing something really important.

When the form is created at first, I understood that it would cache it somewhere else so it can be used later. Good! But when some of the fields inside the multigroup needs to be generated everytime we create them. Lets take this exemple. I used the popups_reference module that would add a hook to alter the select field and add a prefix and suffix. When the form is generated, the field will have those prefix and suffix.

But once the node is created the $form[$group_name][$field_name] will be destroyed and then when we call the add_more_js function...the datas will be in $form[$group_name][0][$field_name].
It just sound weird that these things get moved.

I don't know but I would see something like that

Skeleton of a form
$form['group']['orphan_field'][$field_name] << field definition that aren't part of any group (never erased)
$form['group'][$group_name][$field_name] << field definition that are part of a group (never erased)

$form["group_orphan_field"]["field_$field_name"] << would represent orphan field of the node (value only)
$form[$group_name][$id][$field_name] << would represent all the field for each groups (value only)

then when we want to display then we only have to merge the field definition with the values.
the values would then either append or override certain values.

like #prefix and #suffix would be appended or prepended...and #value would be overrided etc...

But in any case once the form is created the form skeleton is never altered unless there is a way to specify it.
In my case, I popus_reference should have been called everytime a multigroup form was created but I found a way to work around it. But I guess there are some case where alter_field function should always be called. Because there might be something specific if there is more than one field in the multigroup with the same behaviour and if we add those same field multiple time they might conflict between each others.

I also have a last problem. It can probably be fixed easily but the thing is that because the alter_field function wasn't called. The module wouldn't be called in anyway. This said. when the "add_more_js" function is called. It override things in "Drupal.settings". The popups behaviour would then be erased and popups wouldn't work anymore.
.
I found a way to solve this by saving a temporary copy of Drupal.settings.popups before the multigroup update for AHAH. and then bring it back. It's not really generic and will break for each upgrades of multigroup unless there is a way to merge Drupal.settings without deleting anything.

I would see something like

load_form("node_type");
inside the load form function there could be something like
load_groups("node_type", "group_name");

then when the form skeleton is completely loaded we can add data values in our form. And at last we would merge everything for output.

1. load_form
1.5. load_groups (standart, multigroups)
2. load_orphan_field_values
2.5 load_group_field_value
3. Merging form definition with values
3.5 Merging form group definition with values
4. Output

this way, when we only need to load a create a new group we can then load the group definitions at will.
then load datas for those groups easily.

I don't know if I'm really clear. English isn't my first language...
Anyway, I feel that the way form are created right now is too complicated for what it is. I'm pretty sure there is a way to make things a lot more generic than they are right now.
I really think this module could become really important for cck...but right now. And I think there is a problem in the idea i'm proposing right now. Because I didn't think about "group" containing "groups" and "fields"

Thank you