Static field works, dynamically modified element gets lost
instead of over writing the form element just edit variables you want to change something like below

  $publishers = array( 'pub1' =&gt; 'Publisher 1', 'pub2' =&gt; 'Publisher 2' );

  $form['field_publisher_code']['#type'] = 'select';
  $form['field_publisher_code']['#options'] = $publishers;
  $form['field_publisher_code']['#multiple'] = FALSE;


I presume your $form already has the variable when you get the form.