How can I add multiple field collections based on a reference on a new node
I ended up using the same approach as How to create (&amp; pre-populate) multiple “field collection” fields on an ajax call.

Use hook_form_FORM_ID_alter() to the node you need the functionality at. 

// Add ajax callback when a node reference is entered or changed.
$form['field_node_reference'][LANGUAGE_NONE][0]['target_id']['#ajax'] = array(
  'callback' =&gt; 'your_module_ajax_rebuild_form',
  'wrapper' =&gt; 'field-collection-values',
);


Create ajax callback.

/**
 * Ajax callback, rebuilds and returns the field_collection_colorizer 
 * element.
 */
function your_module_ajax_rebuild_form() {
  // Get Field collections and children.
  $field_collection_colorizer = &amp;$form_state['field']['field_collection'][LANGUAGE_NONE];
  $field_childs = &amp;$form_state['field']['field_collection'][LANGUAGE_NONE]['entity'];

  // Found that I had to set item and items count in order for this to work.
  $field_collection_colorizer['item_count'] = $options_count;
  $field_collection_colorizer['items_count'] = $options_count;

  // Create any new field collection instances if needed.
  for ($i = 0; $i &lt; $field_collection_colorizer['item_count']; $i++) {
    if (!isset($field_collection_colorizer['entity'][$i])) {
      $field_collection_colorizer['entity'][$i] = entity_create('field_collection_item', array('field_name' =&gt; 'field_collection_colorizer'));
    }
  }

  // Reset the input to make sure cached version of the form insn't returned.
  $form_state['input'] = array();

  // Rebuild the form.
  $form = drupal_rebuild_form($form_state['build_info']['form_id'], $form_state, $form);

  // Return the field you want to replace.
  return $form['field_collection_colorizer'];
}