diff --git includes/entity.wrapper.inc includes/entity.wrapper.inc
index 675d76e..104bb41 100644
--- includes/entity.wrapper.inc
+++ includes/entity.wrapper.inc
@@ -129,7 +129,7 @@ abstract class EntityMetadataWrapper {
    * Returns whether $value is a valid value to set.
    */
   public function validate($value) {
-    if (!entity_property_verify_data_type($value, $this->type)) {
+    if (isset($value) && !entity_property_verify_data_type($value, $this->type)) {
       return FALSE;
     }
     return !isset($this->info['validation callback']) || call_user_func($this->info['validation callback'], $value, $this->info);
@@ -946,7 +946,7 @@ class EntityListWrapper extends EntityMetadataWrapper implements IteratorAggrega
    * list items.
    */
   public function validate($value) {
-    return entity_property_verify_data_type($value, $this->type);
+    return !isset($value) || entity_property_verify_data_type($value, $this->type);
   }
 
   /**
diff --git modules/callbacks.inc modules/callbacks.inc
index 037480b..f2503f0 100644
--- modules/callbacks.inc
+++ modules/callbacks.inc
@@ -373,7 +373,9 @@ function entity_metadata_field_property_set($entity, $name, $value, $langcode, $
 
   $items = array();
   foreach ($values as $delta => $value) {
-    $items[$delta][$columns[0]] = $value;
+    if (isset($value)) {
+      $items[$delta][$columns[0]] = $value;
+    }
   }
   $entity->{$name}[$langcode] = $items;
   // Empty the static field language cache, so the field system picks up any
@@ -418,7 +420,10 @@ function entity_metadata_field_verbatim_get($entity, array $options, $name, $ent
 function entity_metadata_field_verbatim_set($entity, $name, $items, $langcode) {
   $field = field_info_field($name);
   $langcode = isset($langcode) ? $langcode : LANGUAGE_NONE;
-  $entity->{$name}[$langcode] = $field['cardinality'] == 1 ? array($items) : $items;
+  $value = $field['cardinality'] == 1 ? array($items) : $items;
+  // Filter out any items set to NULL.
+  $entity->{$name}[$langcode] = array_filter($value);
+
   // Empty the static field language cache, so the field system picks up any
   // possible new languages.
   drupal_static_reset('field_language');
