Multiple select do not save for my custom field with custom widget
The values won't save when you don't have any storage to write into.

Make sure your widget implements hook_field_schema() and provide necessary schema for a field structure in your .install file. E.g.

/**
 * Implements hook_field_schema().
 */
function MYMODULE_field_schema($field) {
  switch ($field['type']) {
    default:
      $columns = array(
        'value' =&gt; array(
          'type' =&gt; 'text',
          'not null' =&gt; FALSE,
        ),
      );
      break;
  }
  return array(
    'columns' =&gt; $columns,
    'indexes' =&gt; array(
      'value' =&gt; array('value'),
    ),
  );
}


Then in hook_field_info() make sure you've FIELD_BEHAVIOR_DEFAULT for multiple values behavior, e.g.

/**
 * Implements hook_field_widget_info().
 */
function MYMODULE_field_field_widget_info() {
  return array(
    'my_widget' =&gt; array(
      'label' =&gt; t('Default'),
      'field types' =&gt; array('select'),
      'behaviors' =&gt; array(
        'multiple values' =&gt; FIELD_BEHAVIOR_DEFAULT,
      ),
    ),
  );
}


When implementing multiple field properties as part of one widget (such as address field), please check: How to override default cardinality for the field widget?

For complete example, check existing modules under field core module or check field_example module (part of Examples).