I am trying to create a custom field type and I am facing some problem in saving the values.
Please go through below code first

function xyz_field_widget_form () {
  $elements[$delta]['#process'][] = 'xyz_field_widget_process';
}

function xyz_field_widget_process($element, &$form_state, $form) {
  $element['asset_id'] = array(
    '#type' => 'hidden',
    //'#default_value' => (isset($item['asset_id']) && !empty($item['asset_id'])) ? $item['asset_id'] : $assetid,
    '#default_value' => isset($item['asset_id']) ? $item['asset_id'] : 'old value',
    '#maxlength' => 1024,
    //'#value' =>  isset($assetid) ? $assetid : '',
    '#value' =>  'old value',
    '#access' => (bool) $item['fid'] && $settings['asset_id_field'],
  );

  $element[$key]['#submit'][] = 'xyz_field_widget_submit';
}

function xyz_field_widget_submit ($form, &$form_state) {

 $submitted_values[0]['asset_id'] = 'new value';
  // Update form_state values.
  drupal_array_set_nested_value($form_state['values'], array_slice($button['#array_parents'], 0, -2), $submitted_values);

  // Update items.
  $field_state = field_form_get_state($parents, $field_name, $langcode, $form_state);
  $field_state['items'] = $submitted_values;
  field_form_set_state($parents, $field_name, $langcode, $form_state, $field_state);
  dsm($form_state);
}

Now when I dsm the $form_states after drupal_array_set_nested_value it shows the new value, but after submitting the whole node form, the old value is saved and displayed at the time of node load.
Any idea here what am I doing wrong?