私はそれを考え出した。トリックは、引数として $form_state にノードをロードすることでした。その後、フォームをレンダリングする方法がいくつかあります (以下を参照)。
ctools_include('node.pages', 'node', '');
$form_state['build_info']['args'] = array($node);
$output = ctools_modal_form_wrapper('my_content_type_node_form', $form_state);
print ajax_render($output);
ctools_include('node.pages', 'node', '');
$form_state['build_info']['args'] = array($node);
$form = drupal_retrieve_form('my_content_type_node_form', &$form_state);
print ajax_render($output);
これが必要な理由は、ノード フォームが既に所有しているすべての送信ハンドラーと検証を再インクルードする必要がないようにするためです。ただし、ajax のため、フォームにファイルのアップロードがある場合は、これも必要になります。
form_load_include($form_state, 'inc', 'node', 'node.pages');