webform select options validation unique
You can use a select list with a pre-loaded option list. In that "preload" callback you can alter available options.

Define a custom option list:

function mymodule_webform_select_options_info() {
  $items = array();

  $items['exclusive'] = array(
    'title' =&gt; t('Exclusive options'), 
    'options callback' =&gt; 'mymodule_webform_options_exclusive', 
  );

  return $items;
}


This callback is called every time the form is displayed, we can alter options here based on previous submissions:

function mymodule_webform_options_exclusive() {
  $default_options = array("One" =&gt; 1, "Two" =&gt; 2, "Three" =&gt; 3);
  $available_values = mymodule_webform_available_values(5); // nid of the webform

  return array_diff($default_options, $available_values);
}

function mymodule_webform_available_values($nid) {
  $submissions = webform_get_submissions(array("nid" =&gt; $nid));

  // get all the options values that were already submitted
  $values = array_values(array_map(function($submission) {
    return $submission-&gt;data[1][0]; // 1 == index of the field in the form
  }, $submissions));

  return $values;
}


Two things are hard-coded here: nid of the webform (5 here) and the index of the select widget (1 here). It might be possible to avoid hard-coding stuff, good luck!