Add state for Germany and drop-down menu
Address Field module uses a plugin system for building the address fields. You should create an address field plugin in your custom module. 

hook_form_alter() wouldn't help much in this case.

To create a plugin for Address Field, you should first implement hook_ctools_plugin_directory() in your module to tell you have an addressfield plugin and where they live:

function YOURMODULE_ctools_plugin_directory($module, $plugin) {
  if ($module == 'addressfield' &amp;&amp; $plugin == 'format') {
    return 'plugins/format';
  }
}


Then, create the folders plugins/format in your module. The folder names are up to you. Under this folder create an .inc file, and give it a relating name, like german-states.inc.

In this file, you should define a $plugin array, which holds the information about your plugin, including the callback function name. Then define a function which can add new form elements, edit existing form elements etc.

$plugin = array(
  'title' =&gt; t('German States'),
  'format callback' =&gt; 'YOURMODULE_format_german_states_generate',
  'type' =&gt; 'name',
  'weight' =&gt; 0,
);

function YOURMODULE_format_german_states_generate(&amp;$format, $address) {
  // Add new form element for German states
  if ($address['country'] == 'DE') {
    $format['locality_block']['administrative_area'] = array(
      '#title' =&gt; t('State'),
      '#required' =&gt; TRUE, // Set this FALSE if you don't want it to be required.
      '#attributes' =&gt; array(
        'class' =&gt; array('state'),
        'x-autocompletetype' =&gt; 'region',
        'autocomplete' =&gt; 'region',
      ),
      '#options' =&gt; array(
        '' =&gt; t('--'),
        'BW' =&gt; t('Baden-Württemberg'),
        'BY' =&gt; t('Bavaria'),
        'BE' =&gt; t('Berlin'),
        'BB' =&gt; t('Brandenburg'),
        'HB' =&gt; t('Bremen'),
        'HH' =&gt; t('Hamburg'),
        'HE' =&gt; t('Hesse'),
        'NI' =&gt; t('Lower Saxony'),
        'MV' =&gt; t('Mecklenburg-Vorpommern'),
        'NRW' =&gt; t('North Rhine-Westphalia'),
        'RP' =&gt; t('Rhineland-Palantine'),
        'SL' =&gt; t('Saarland'),
        'SN' =&gt; t('Saxony'),
        'ST' =&gt; t('Saxony-Anhalt'),
        'SH' =&gt; t('Schleswig-Holstein'),
        'TH' =&gt; t('Thuringia'),
      ),
    );
  }
}