diff --git a/backbone.api.php b/backbone.api.php
new file mode 100644
index 0000000..e44e7da
--- /dev/null
+++ b/backbone.api.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * @file
+ * Hooks provided by Backbone.js for Drupal module.
+ */
+
+/**
+ * @addtogroup hooks
+ * @{
+ */
+
+/**
+ * Inform the module about one or more additional back-ends.
+ *
+ * The 'backbone_init' hook will be called on the module whose back-end is
+ * chosen when Backbone is to be included into a page.
+ *
+ * @return array
+ *   An associative array whose keys are back-end module machine names and
+ *   whose values are translated back-end human-readable names.
+ *
+ * @see hook_backbone_backends_alter()
+ * @see hook_backbone_init()
+ *
+ * @ingroup backbone
+ */
+function hook_backbone_backends() {
+  return array(
+    'backbone_backend' => t('My Backbone.js backend'),
+  );
+}
+
+/**
+ * Alter information from hook_backbone_backends().
+ *
+ * @param array $backends
+ *   Information gathered by hook_backbone_backends() from other modules'
+ *   implementations of it. Alter this array directly.
+ *
+ * @see hook_backbone_backends()
+ */
+function hook_backbone_backends_alter(&$backends) {
+  $backends['backbone_backend'] = t('My amazing Backbone.js backend');
+  unset($backends['backbone_unreliable_backend']);
+}
+
+/**
+ * React on Backbone API JavaScript inclusion into a page.
+ *
+ * @ingroup backbone
+ */
+function hook_backbone_attach() {
+  drupal_set_message(t('Backbone API JavaScript has been added to the page.'));
+}
+
+/**
+ * @} End of "addtogroup hooks".
+ */
diff --git a/backbone.module b/backbone.module
index b14b97c..b9c7ce9 100644
--- a/backbone.module
+++ b/backbone.module
@@ -37,8 +37,10 @@ function backbone_init() {
 /**
  * Implements hook_backbone_init().
  *
- * We only add the backbone api js if the current page has been
- * specified as a backbone page.
+ * Only add the Backbone API JavaScript if the current page has been
+ * specified as a Backbone page.
+ *
+ * @see hook_backbone_init()
  */
 function backbone_backbone_init($path) {
   backbone_attach();
@@ -184,6 +186,16 @@ function backbone_backbone_settings_form() {
 
   $backends = module_invoke_all('backbone_backends');
 
+  drupal_alter('backbone_backends', $backends);
+
+  if (count($backends)) {
+    foreach ($backends as $module => $backend_name) {
+      if (!module_exists($module)) {
+        unset($backends[$module]);
+      }
+    }
+  }
+
   $form['backbone_backend_module'] = array(
     '#type' => 'select',
     '#title' => t('REST Backend'),
diff --git a/modules/backbone_library/backbone_library.api.php b/modules/backbone_library/backbone_library.api.php
new file mode 100644
index 0000000..fecb38b
--- /dev/null
+++ b/modules/backbone_library/backbone_library.api.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * @file
+ * Hooks provided by Backbone.js for Drupal module.
+ */
+
+/**
+ * @addtogroup hooks
+ * @{
+ */
+
+/**
+ * React on Backbone.js inclusion into a page.
+ *
+ * @param string $path
+ *   Processed path of target page URL alias.
+ *
+ * @ingroup backbone
+ */
+function hook_backbone_init($path) {
+  drupal_set_message(
+    t('Backbone.js has been added to !page.', array('!page' => l($path, $path)))
+  );
+}
+
+/**
+ * @} End of "addtogroup hooks".
+ */
diff --git a/modules/backbone_library/backbone_library.module b/modules/backbone_library/backbone_library.module
index e131a4e..3736d2c 100644
--- a/modules/backbone_library/backbone_library.module
+++ b/modules/backbone_library/backbone_library.module
@@ -34,8 +34,7 @@ function backbone_library_init() {
 /**
  * Implements hook_backbone_init().
  *
- * @param String $path
- *   Processed path of current alias.
+ * @see hook_backbone_init()
  */
 function backbone_library_backbone_init($path) {
   drupal_add_library('backbone_library', 'backbone');
diff --git a/modules/backbone_restws/backbone_restws.module b/modules/backbone_restws/backbone_restws.module
index 5cd849a..c1a940f 100644
--- a/modules/backbone_restws/backbone_restws.module
+++ b/modules/backbone_restws/backbone_restws.module
@@ -17,12 +17,7 @@ function backbone_restws_help($path, $arg) {
 /**
  * Implements hook_backbone_backends().
  *
- *
- * @return Array
- *   List with the name of the backend module as they key and
- *   translated option name as the value.  The "backbone_init"
- *   hook will be called on this module if it's chosen, when
- *   backbone is to be included in a page by the settings.
+ * @see hook_backbone_backends()
  */
 function backbone_restws_backbone_backends() {
   return array(
diff --git a/modules/backbone_services/backbone_services.module b/modules/backbone_services/backbone_services.module
index 3983d23..6992de9 100644
--- a/modules/backbone_services/backbone_services.module
+++ b/modules/backbone_services/backbone_services.module
@@ -17,12 +17,7 @@ function backbone_services_help($path, $arg) {
 /**
  * Implements hook_backbone_backends().
  *
- *
- * @return Array
- *   List with the name of the backend module as they key and
- *   translated option name as the value.  The "backbone_init"
- *   hook will be called on this module if it's chosen, when
- *   backbone is to be included in a page by the settings.
+ * @see hook_backbone_backends()
  */
 function backbone_services_backbone_backends() {
   return array(
