"Add another item" using #ajax in hook_field_widget_form
Looks like you're just missing a #tree property:


  Used to allow collections of form elements. Normally applied to the "parent" element, as the #tree property cascades to sub-elements. Use where you previously used ][ in form_ calls. For more information, see #tree and #parents in the handbook.


e.g.

$element['question_wrapper'] = array(
  '#type' =&gt; 'fieldset',
  '#title' =&gt; t('Questions'),
  // Set up the wrapper so that AJAX will be able to replace the fieldset.
  '#prefix' =&gt; '&lt;div id="names-fieldset-wrapper"&gt;',
  '#suffix' =&gt; '&lt;/div&gt;',
  '#tree' =&gt; TRUE,
);


And then in the validate handler:

foreach ($form_state['values']['question_wrapper'] as $key =&gt; $value) {
  if (is_numeric($key) &amp;&amp; something_is_wrong_with($value['question'])) {
    form_set_error("question_wrapper][$key][question", 'Error');
  }
}