diff --git a/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php b/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php
index 28b6df0..acf40e4 100644
--- a/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php
+++ b/core/modules/migrate/src/Plugin/migrate/process/SkipOnEmpty.php
@@ -9,9 +9,87 @@
 use Drupal\migrate\MigrateSkipRowException;
 
 /**
- * If the source evaluates to empty, we skip processing or the whole row.
+ * Skips processing the current row when the input value is empty.
  *
- * @link https://www.drupal.org/node/2228793 Online handbook documentation for skip_on_empty process plugin @endlink
+ * The skip_on_empty process plugin checks to see if the current input value
+ * is empty (empty string, NULL, FALSE, 0, '0', or an empty array). If so, the further
+ * processing of the property or the entire row (depending on the chosen method)
+ * is skipped and will not be migrated.
+ *
+ * Available configuration keys:
+ *   - method: (optional) level of skip.
+ *     - row: Skips the entire row when an empty value is encountered. Useful when
+ *        combined with a migration process plugin to check if a related item
+ *        was previously migrated.
+ *     - process: Skips the processing of the property when an empty value is
+ *        encountered. Useful when migrating parent values, there is no need to
+ *        set a destination value.
+ *
+ * Examples:
+ *
+ * @code
+ * process:
+ *   field_type_exists:
+ *   -
+ *     plugin: migration
+ *     migration: d6_field
+ *     source:
+ *       - field_name
+ *   -
+ *     plugin: skip_on_empty
+ *     method: row
+ *   -
+ *     plugin: extract
+ *     index:
+ *       - 1
+ * @endcode
+ *
+ * If field_name is empty, skips the row process.
+ *
+ * @code
+ * process:
+ *   parent:
+ *   -
+ *     plugin: skip_on_empty
+ *     method: process
+ *     source: parent
+ *   -
+ *     plugin: migration
+ *     migration: d6_taxonomy_term
+ * @endcode
+ *
+ * If parent is empty, skips parent process but d6_taxonomy_term will be
+ * processed.
+ *
+ * Another example for process:
+ *
+ * @code
+ *  process:
+ *    book.pid:
+ *    -
+ *      plugin: skip_on_empty
+ *      method: process
+ *      source: plid
+ *    -
+ *     plugin: migration
+ *     migration: d6_book
+ * @endcode
+ *
+ * or
+ *
+ * @code
+ *  process:
+ *    pid:
+ *    -
+ *      plugin: skip_on_empty
+ *      method: process
+ *      source: pid
+ *    -
+ *      plugin: migration
+ *      migration: d6_comment
+ * @endcode
+ *
+ * @see \Drupal\migrate\Plugin\MigrateProcessInterface
  *
  * @MigrateProcessPlugin(
  *   id = "skip_on_empty"
@@ -20,7 +98,25 @@
 class SkipOnEmpty extends ProcessPluginBase {
 
   /**
-   * {@inheritdoc}
+   * Skips migration process at row level when value is not set and throws a
+   * MigrateSkipRowException with STATUS_IGNORED status.
+   *
+   * @param mixed $value
+   *   The input value.
+   * @param \Drupal\migrate\MigrateExecutableInterface $migrate_executable
+   *   The migration in which this process is being executed.
+   * @param \Drupal\migrate\Row $row
+   *   The row from the source to process.
+   * @param string $destination_property
+   *   The destination property currently worked on. This is only used together
+   *   with the $row above.
+   *
+   * @return string
+   *   The sub string of $value.
+   *
+   * @throws \Drupal\migrate\MigrateSkipRowException
+   *   Thrown if source property is not set and row should be skipped, by
+   *    default records with STATUS_IGNORED status in the map.
    */
   public function row($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     if (!$value) {
@@ -30,7 +126,25 @@ public function row($value, MigrateExecutableInterface $migrate_executable, Row
   }
 
   /**
-   * {@inheritdoc}
+   * Skips migration process at process level when value is not set and throws a
+   * MigrateSkipProcessException.
+   *
+   * @param mixed $value
+   *   The input value.
+   * @param \Drupal\migrate\MigrateExecutableInterface $migrate_executable
+   *   The migration in which this process is being executed.
+   * @param \Drupal\migrate\Row $row
+   *   The row from the source to process.
+   * @param string $destination_property
+   *   The destination property currently worked on. This is only used together
+   *     with the $row above.
+   *
+   * @return string
+   *   The sub string of $value.
+   *
+   * @throws \Drupal\migrate\MigrateSkipProcessException
+   *   Thrown if source property is not set and rest of the process should be
+   *    skipped.
    */
   public function process($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) {
     if (!$value) {
