diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php
index d993c67..70f620c 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsButtonsWidget.php
@@ -68,7 +68,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
    */
   protected function getEmptyOption() {
     if (!$this->required && !$this->multiple) {
-      return static::OPTIONS_EMPTY_NONE;
+      return ['_none' => t('N/A')];
     }
   }
 
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsSelectWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsSelectWidget.php
index a5b68af..cabdc60 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsSelectWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsSelectWidget.php
@@ -66,7 +66,7 @@ protected function getEmptyOption() {
     if ($this->multiple) {
       // Multiple select: add a 'none' option for non-required fields.
       if (!$this->required) {
-        return static::OPTIONS_EMPTY_NONE;
+        return ['_none' => t('- None -')];
       }
     }
     else {
@@ -74,10 +74,10 @@ protected function getEmptyOption() {
       // and a 'select a value' option for required fields that do not come
       // with a value selected.
       if (!$this->required) {
-        return static::OPTIONS_EMPTY_NONE;
+        return ['_none' => t('- None -')];
       }
       if (!$this->has_value) {
-        return static::OPTIONS_EMPTY_SELECT;
+        return ['_none' => t('- Select a value -')];
       }
     }
   }
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php
index b155c3b..2534474 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/OptionsWidgetBase.php
@@ -27,16 +27,6 @@
 abstract class OptionsWidgetBase extends WidgetBase {
 
   /**
-   * Identifies a 'None' option.
-   */
-  const OPTIONS_EMPTY_NONE = 'option_none';
-
-  /**
-   * Identifies a 'Select a value' option.
-   */
-  const OPTIONS_EMPTY_SELECT = 'option_select';
-
-  /**
    * Abstract over the actual field columns, to allow different field types to
    * reuse those widgets.
    *
@@ -131,17 +121,7 @@ protected function getOptions(FieldableEntityInterface $entity) {
 
       // Add an empty option if the widget needs one.
       if ($empty_option = $this->getEmptyOption()) {
-        switch ($this->getPluginId()) {
-          case 'options_buttons':
-            $label = t('N/A');
-            break;
-
-          case 'options_select':
-            $label = ($empty_option == static::OPTIONS_EMPTY_NONE ? t('- None -') : t('- Select a value -'));
-            break;
-        }
-
-        $options = array('_none' => $label) + $options;
+        $options = $empty_option + $options;
       }
 
       $module_handler = \Drupal::moduleHandler();
@@ -214,10 +194,10 @@ protected function sanitizeLabel(&$label) {
   }
 
   /**
-   * Returns the empty option to add to the list of options, if any.
+   * Returns the empty option and label to add to the list of options, if any.
    *
-   * @return string|null
-   *   Either static::OPTIONS_EMPTY_NONE, static::OPTIONS_EMPTY_SELECT, or NULL.
+   * @return array|null
+   *   Either _none as a key and value as a label of the empty option, or NULL.
    */
   protected function getEmptyOption() { }
 
diff --git a/core/modules/options/src/Tests/OptionsWidgetsTest.php b/core/modules/options/src/Tests/OptionsWidgetsTest.php
index 0de54a5..a229fa7 100644
--- a/core/modules/options/src/Tests/OptionsWidgetsTest.php
+++ b/core/modules/options/src/Tests/OptionsWidgetsTest.php
@@ -450,4 +450,47 @@ function testSelectListMultiple() {
     $this->assertFieldValues($entity_init, 'card_2', array());
   }
 
+  /**
+   * Tests the 'options_test_select' and 'options_test_button' widget for empty value.
+   */
+  function testEmptyValue() {
+    // Create an instance of the 'single value' field.
+    $field = entity_create('field_config', [
+      'field_storage' => $this->card1,
+      'bundle' => 'entity_test',
+    ]);
+    $field->save();
+
+    // Change it to the check boxes/radio buttons widget.
+    entity_get_form_display('entity_test', 'entity_test', 'default')
+      ->setComponent($this->card1->getName(), [
+        'type' => 'options_test_buttons',
+      ])
+      ->save();
+
+    // Create an entity.
+    $entity = entity_create('entity_test', [
+      'user_id' => 1,
+      'name' => $this->randomMachineName(),
+    ]);
+    $entity->save();
+
+    // Display form: check that _none options are present and has label.
+    $this->drupalGet('entity_test/manage/' . $entity->id());
+    $this->assertTrue($this->xpath('//div[@id=:id]//div[@class=:class]//input[@value=:value]', array(':id' => 'edit-card-1', ':class' => 'form-item form-type-radio form-item-card-1', ':value' => '_none')), 'A test radio button has a "None" choice.');
+    $this->assertTrue($this->xpath('//div[@id=:id]//div[@class=:class]//label[@for=:for and text()=:label]', array(':id' => 'edit-card-1', ':class' => 'form-item form-type-radio form-item-card-1', ':for' => 'edit-card-1-none', ':label' => 'N/A')), 'A test radio button has a "N/A" choice.');
+
+    // Change it to the select widget.
+    entity_get_form_display('entity_test', 'entity_test', 'default')
+      ->setComponent($this->card1->getName(), array(
+        'type' => 'options_test_select',
+      ))
+      ->save();
+
+    // Display form: check that _none options are present and has label.
+    $this->drupalGet('entity_test/manage/' . $entity->id());
+    // A required field without any value has a "none" option.
+    $this->assertTrue($this->xpath('//select[@id=:id]//option[@value="_none" and text()=:label]', array(':id' => 'edit-card-1', ':label' => t('- None -'))), 'A test select has a "None" choice.');
+  }
+
 }
diff --git a/core/modules/options/tests/options_test/src/Plugin/Field/FieldWidget/OptionsTestButtonsWidget.php b/core/modules/options/tests/options_test/src/Plugin/Field/FieldWidget/OptionsTestButtonsWidget.php
new file mode 100644
index 0000000..0b3dff6
--- /dev/null
+++ b/core/modules/options/tests/options_test/src/Plugin/Field/FieldWidget/OptionsTestButtonsWidget.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\options_test\Plugin\Field\FieldWidget\OptionsTestButtonsWidget.
+ */
+
+namespace Drupal\options_test\Plugin\Field\FieldWidget;
+
+use Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsButtonsWidget;
+
+/**
+ * Plugin implementation of the 'options_test_buttons' widget.
+ *
+ * @FieldWidget(
+ *   id = "options_test_buttons",
+ *   label = @Translation("Check boxes/radio buttons"),
+ *   field_types = {
+ *     "boolean",
+ *     "list_integer",
+ *     "list_float",
+ *     "list_string",
+ *   },
+ *   multiple_values = TRUE
+ * )
+ */
+class OptionsTestButtonsWidget extends OptionsButtonsWidget { }
diff --git a/core/modules/options/tests/options_test/src/Plugin/Field/FieldWidget/OptionsTestSelectWidget.php b/core/modules/options/tests/options_test/src/Plugin/Field/FieldWidget/OptionsTestSelectWidget.php
new file mode 100644
index 0000000..17f5e1b
--- /dev/null
+++ b/core/modules/options/tests/options_test/src/Plugin/Field/FieldWidget/OptionsTestSelectWidget.php
@@ -0,0 +1,26 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\options_test\Plugin\Field\FieldWidget\OptionsTestSelectWidget.
+ */
+
+namespace Drupal\options_test\Plugin\Field\FieldWidget;
+
+use Drupal\Core\Field\Plugin\Field\FieldWidget\OptionsSelectWidget;
+
+/**
+ * Plugin implementation of the 'options_test_select' widget.
+ *
+ * @FieldWidget(
+ *   id = "options_test_select",
+ *   label = @Translation("Select list"),
+ *   field_types = {
+ *     "list_integer",
+ *     "list_float",
+ *     "list_string"
+ *   },
+ *   multiple_values = TRUE
+ * )
+ */
+class OptionsTestSelectWidget extends OptionsSelectWidget { }
