diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/PasswordItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/PasswordItem.php
index 621bb63..7de771a 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/PasswordItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/PasswordItem.php
@@ -63,16 +63,4 @@ public function preSave() {
       }
     }
   }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isEmpty() {
-    // We cannot use the parent implementation from StringItem as it does not
-    // consider the additional 'existing' property that PasswordItem contains.
-    $value = $this->get('value')->getValue();
-    $existing = $this->get('existing')->getValue();
-    return $value === NULL && $existing === NULL;
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php
index 065310c..4772983 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/StringItemBase.php
@@ -40,12 +40,4 @@ public static function propertyDefinitions(FieldStorageDefinitionInterface $fiel
     return $properties;
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function isEmpty() {
-    $value = $this->get('value')->getValue();
-    return $value === NULL || $value === '';
-  }
-
 }
diff --git a/core/modules/file/src/Tests/Migrate/d6/MigrateUploadBase.php b/core/modules/file/src/Tests/Migrate/d6/MigrateUploadBase.php
index 6057919..5cff822 100644
--- a/core/modules/file/src/Tests/Migrate/d6/MigrateUploadBase.php
+++ b/core/modules/file/src/Tests/Migrate/d6/MigrateUploadBase.php
@@ -84,7 +84,6 @@ protected function setUp() {
         'type' => 'story',
         'nid' => $i,
         'vid' => array_shift($vids),
-        'title' => $this->randomString(),
       ));
       $node->enforceIsNew();
       $node->save();
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index 1e5e5ef..c1ef29b 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -387,6 +387,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setRequired(TRUE)
       ->setTranslatable(TRUE)
       ->setRevisionable(TRUE)
+      ->setDefaultValue('')
       ->setSetting('max_length', 255)
       ->setDisplayOptions('view', array(
         'label' => 'hidden',
diff --git a/core/modules/options/src/Tests/Views/OptionsTestBase.php b/core/modules/options/src/Tests/Views/OptionsTestBase.php
index b204d1b..6712160 100644
--- a/core/modules/options/src/Tests/Views/OptionsTestBase.php
+++ b/core/modules/options/src/Tests/Views/OptionsTestBase.php
@@ -56,7 +56,6 @@ protected function setUp() {
 
     $settings = [];
     $settings['type'] = 'article';
-    $settings['title'] = $this->randomString();
     $settings['field_test_list_string'][]['value'] = $this->fieldValues[0];
     $settings['field_test_list_integer'][]['value'] = 0;
 
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index ba6af78..108bbc9 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -132,6 +132,7 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
       ->setDescription(t('The name of the shortcut.'))
       ->setRequired(TRUE)
       ->setTranslatable(TRUE)
+      ->setDefaultValue('')
       ->setSetting('max_length', 255)
       ->setDisplayOptions('form', array(
         'type' => 'string_textfield',
diff --git a/core/modules/system/src/Tests/Entity/EntityFieldTest.php b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
index 5414730..dbaa45f 100644
--- a/core/modules/system/src/Tests/Entity/EntityFieldTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityFieldTest.php
@@ -381,6 +381,26 @@ protected function doTestSave($entity_type) {
   }
 
   /**
+   * Test that entities can save an empty string.
+   */
+  public function testEmptyStringSave() {
+    $entity = $this->entityManager
+      ->getStorage('entity_test')
+      ->create([]);
+    $entity_name = $this->randomMachineName();
+    $account = $this->createUser();
+
+    $entity->user_id->target_id = $account->id();
+    $entity->name->value = $entity_name;
+
+    // Set a value for the test field.
+    $entity->field_test_text->value = '';
+    $entity->save();
+    $this->assertTrue((bool) $entity->id(), 'Entity has received an id.');
+    $this->assertIdentical($entity->field_test_text->value, '', 'Text field saved an empty string');
+  }
+
+  /**
    * Tests introspection and getting metadata upfront.
    */
   public function testIntrospection() {
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index 3716d01..53155a0 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -463,14 +463,13 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
     $fields['name'] = BaseFieldDefinition::create('string')
       ->setLabel(t('Name'))
       ->setDescription(t('The name of this user.'))
-      ->setRequired(TRUE)
+      ->setDefaultValue('')
       ->setConstraints(array(
         // No Length constraint here because the UserName constraint also covers
         // that.
         'UserName' => array(),
         'UserNameUnique' => array(),
       ));
-    $fields['name']->getItemDefinition()->setClass('\Drupal\user\UserNameItem');
 
     $fields['pass'] = BaseFieldDefinition::create('password')
       ->setLabel(t('Password'))
diff --git a/core/modules/user/src/UserNameItem.php b/core/modules/user/src/UserNameItem.php
deleted file mode 100644
index 4e2852b..0000000
--- a/core/modules/user/src/UserNameItem.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\user\UserNameItem.
- */
-
-namespace Drupal\user;
-
-use Drupal\Core\Field\Plugin\Field\FieldType\StringItem;
-
-/**
- * Defines a custom field item class for the 'name' user entity field.
- */
-class UserNameItem extends StringItem {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function isEmpty() {
-    $value = $this->get('value')->getValue();
-
-    // Take into account that the name of the anonymous user is an empty string.
-    if ($this->getEntity()->isAnonymous()) {
-      return $value === NULL;
-    }
-
-    return $value === NULL || $value === '';
-  }
-
-}
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index 91a908e..dd55b49 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -70,7 +70,6 @@ function user_install() {
     ->create(array(
       'uid' => 0,
       'status' => 0,
-      'name' => '',
     ))
     ->save();
 
