Why this callback doesn't show all node form? This question is related to:
Custom module embedding existing node form

After dealing with returning existing node form via custom module (my_singnup module achieved with the big help of Clive) returning form has no custom field groups and custom fields.

function my_signup($node = FALSE) {
   if($node) {
     if($node-&gt;type == 'event') {
       module_load_include('inc', 'node', 'node.pages');
       global $user;
       $new_node = new stdClass;
       $new_node-&gt;type = 'signup_node_form';
       $new_node-&gt;language = LANGUAGE_NONE;
       $new_node-&gt;user = $user-&gt;uid;
       $new_node-&gt;name = (isset($user-&gt;name) ? $user-&gt;name : '');
       $form = drupal_get_form('signup_node_form', $new_node);
       return $form;
     }
   }
   return drupal_not_found();
}


signup_node_form was build via field UI (create new content type) and looks great when core node/add/signup. It has vertical tabs, validation etc.

I was expecting to get the same with mentioned code. Unfortunately it's not working. I'm getting just Drupal stuff vertical tab (Menu, Book, Version, Adress, Comments...) without my custom groups and fields.
The following line in your code is wrong.

$new_node-&gt;type = 'signup_node_form'


What you are setting as node type is really the form ID, not the content type ID. If you look at the code of node_add(), you will notice the executed code is the following one.

  $types = node_type_get_types();
  $node = (object) array(
    'uid' =&gt; $user-&gt;uid,
    'name' =&gt; (isset($user-&gt;name) ? $user-&gt;name : ''),
    'type' =&gt; $type,
    'language' =&gt; LANGUAGE_NONE,
  );
  drupal_set_title(t('Create @name', array('@name' =&gt; $types[$type]-&gt;name)), PASS_THROUGH);
  $output = drupal_get_form($type . '_node_form', $node);


$type is the parameter the function gets.
If you look at the content type IDs used in Drupal, none of them contains the string "_node_form"; differently, node_add() would call drupal_get_form() passing something similar to "story_node_form_node_form" as form ID. As the modules that add fields to the node edit form check the content type of the node, it is probable they don't add fields for a content type they don't know. That is plausible, as differently it would mean that a taxonomy term field, for example, would be added to nodes for which it was not supposed to be added.