'Add More' Taxonomy Term Widget
I'm sure you could do this in hook_field_widget_form() (which I'm guessing is where your current code is) by just adding a child element to your existing element, e.g.

$element['text'] = array(
  '#type' =&gt; 'textfield',
  '#title' =&gt; 'Title',
  // etc...
);


If that doesn't work I know it will definitely work if you use hook_field_widget_form_alter().

For example, the following is a small function which enables the alt field for an Image field type using the Media Selector widget (for some reason it's not enabled by default):

function media_image_attributes_field_widget_form_alter(&amp;$element, &amp;$form_state, &amp;$context) {
  if ($context['field']['type'] == 'image') {
    $element['alt'] = array(
      '#type' =&gt; 'textfield',
      '#title' =&gt; 'Image Description',
      '#weight' =&gt; 10000,
      '#default_value' =&gt; count($element['#default_value']) ? $element['#default_value']['alt'] : ''
    );
  }
}


As far as the ajax functionality goes, I think you're definitely going along the right lines. I think the Field Example module in Examples has some sample code which might help.