diff --git a/core/modules/block/block.api.php b/core/modules/block/block.api.php
index 284cddc3df649626211ca53cc7d1b1077120c8f1..d9626c827289fd916ddd183c4273989d8436a97c 100644
--- a/core/modules/block/block.api.php
+++ b/core/modules/block/block.api.php
@@ -216,6 +216,23 @@ function hook_block_access(\Drupal\block\Entity\Block $block, $operation, \Drupa
   return AccessResult::neutral();
 }
 
+/**
+ * Allow modules to alter the block plugin definitions.
+ *
+ * @param array[] $definitions
+ *   The array of block definitions, keyed by plugin ID.
+ *
+ * @ingroup block_api
+ */
+function hook_block_alter(&$definitions) {
+  foreach ($definitions as $id => $definition) {
+    if (strpos($id, 'system_menu_block:') === 0) {
+      // Replace $definition properties: id, deriver, class, provider to ones
+      // provided by this custom module.
+    }
+  }
+}
+
 /**
  * @} End of "addtogroup hooks".
  */