diff --git a/core/modules/field/field.crud.inc b/core/modules/field/field.crud.inc
index 6df3235..f5b943c 100644
--- a/core/modules/field/field.crud.inc
+++ b/core/modules/field/field.crud.inc
@@ -571,8 +571,7 @@ function _field_write_instance($instance, $update = FALSE) {
 
   // Set default widget and settings.
   $instance['widget'] += array(
-    // TODO: what if no 'default_widget' specified ?
-    'type' => $field_type['default_widget'],
+    'type' => isset($field_type['default_widget']) ? $field_type['default_widget'] : 'hidden',
     'settings' => array(),
   );
   // If no weight specified, make sure the field sinks at the bottom.
@@ -581,9 +580,11 @@ function _field_write_instance($instance, $update = FALSE) {
     $instance['widget']['weight'] = isset($max_weight) ? $max_weight + 1 : 0;
   }
   // Check widget module.
-  $widget_type = field_info_widget_types($instance['widget']['type']);
-  $instance['widget']['module'] = $widget_type['module'];
-  $instance['widget']['settings'] += field_info_widget_settings($instance['widget']['type']);
+  if ($instance['widget']['type'] != 'hidden') {
+    $widget_type = field_info_widget_types($instance['widget']['type']);
+    $instance['widget']['module'] = $widget_type['module'];
+    $instance['widget']['settings'] += field_info_widget_settings($instance['widget']['type']);
+  }
 
   // Make sure there are at least display settings for the 'default' view mode,
   // and fill in defaults for each view mode specified in the definition.
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index 78bc62e..597ccbf 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -508,6 +508,16 @@ function field_info_field_types($field_type = NULL) {
 function field_info_widget_types($widget_type = NULL) {
   $info = _field_info_collate_types();
   $widget_types = $info['widget types'];
+
+  // Add an hidden (None) widget type for all field types.
+  $widget_types['hidden'] = array(
+    'label' => t('None (hidden)'),
+    'field types' => array_keys($info['field types']),
+    'settings' => array(),
+    'behaviors' => array(),
+    'module' => 'field',
+  );
+
   if ($widget_type) {
     if (isset($widget_types[$widget_type])) {
       return $widget_types[$widget_type];
