diff --git a/entity.api.php b/entity.api.php
index e0a8a04..363f422 100644
--- a/entity.api.php
+++ b/entity.api.php
@@ -150,7 +150,8 @@
  *   passed. See entity_access() for more details on the arguments and
  *   entity_metadata_no_hook_node_access() for an example.
  *   This is optional, but suggested for the Rules integration, and required for
- *   the admin ui (see above).
+ *   the admin ui (see above). If not specified, calls to entity_access() will
+ *   grant access to entities of this type.
  * - form callback: (optional) Specfiy a callback that returns a fully built
  *   edit form for your entity type. See entity_form().
  *   In case the 'admin ui' is used, no callback needs to be specified.
diff --git a/entity.module b/entity.module
index 9c8d5a9..a87ba67 100644
--- a/entity.module
+++ b/entity.module
@@ -636,15 +636,20 @@ function entity_view($entity_type, $entities, $view_mode = 'full', $langcode = N
  *   The user to check for. Leave it to NULL to check for the global user.
  *
  * @return boolean
- *   Whether access is allowed or not. If the entity type does not specify any
- *   access information, NULL is returned.
+ *   Whether access is allowed or not. If the entity type does not specify an
+ *   access callback, TRUE is returned.
  *
  * @see entity_type_supports()
  */
 function entity_access($op, $entity_type, $entity = NULL, $account = NULL) {
-  if (($info = entity_get_info()) && isset($info[$entity_type]['access callback'])) {
-    return $info[$entity_type]['access callback']($op, $entity, $account, $entity_type);
+  $info = entity_get_info($entity_type);
+  if (isset($info['access callback'])) {
+    return $info['access callback']($op, $entity, $account, $entity_type);
   }
+
+  // If the entity type does not define an access callback, then access is
+  // unrestricted.
+  return TRUE;
 }
 
 /**
