Custom view mode issues
The path for your additional pages should be node/%node/abstract and node/%node/cover with something like

$items['node/%node/abstract'] = array(
  'title callback' =&gt; 'node_page_title',
  'title arguments' =&gt; array(1),
  'page callback' =&gt; 'MODULE_node_view',
  'page arguments' =&gt; array('abstract', 1),
  'access callback' =&gt; 'MODULE_node_view_access',
  'access arguments' =&gt; array('abstract', 1),
  'type' =&gt; MENU_LOCAL_TASK,
);

$items['node/%node/cover'] = array(
  'title callback' =&gt; 'node_page_title',
  'title arguments' =&gt; array(1),
  'page callback' =&gt; 'MODULE_node_view',
  'page arguments' =&gt; array('cover', 1),
  'access callback' =&gt; 'MODULE_node_view_access',
  'access arguments' =&gt; array('cover', 1),
  'type' =&gt; MENU_LOCAL_TASK,
);


If you don't want your additional pages to be available as tabs (like View, Edit and Translate), you can probably use 'type' =&gt; MENU_CALLBACK. By doing so, you ensure Drupal knows these pages are below the normal node view page.

MODULE_node_view($view_mode, $node) and MODULE_node_view_access($view_mode, $node) are your page and access callbacks. They receive the $node already loaded (thanks to the %node in the menu item path). If you don't have specific access rules (such as restricting access to only certain content type), you can replace the access callback and arguments by node_access and array('view', 1).

Given the question, your likely want to automatically create aliases for your nodes so you can use paths like dossier/node-alias/cover instead of things like use node/1234/cover. You can implement hook_path_insert() and hook_path_delete() to automatically create and delete abstract and cover aliases for any aliased node.

/**
 * Implements hook_path_insert().
 */
function MODULE_path_insert($path) {
  // If this is an alias to a node view page
  if (preg_match("/^node\/\d+(\/view)?$/", $path['source'], $matches)) {
    // Create aliases for the supported suffixes.
    foreach (array('/abstract', '/cover') as $suffix) {
      $new_path = array_merge($path, array(
        'source' =&gt; $matches[0] . $suffix,
        'alias' =&gt; $path['alias'] . $suffix
      ));
      unset($new_path['pid']);
      path_save($new_path);
    }
  }
}

/**
 * Implements hook_path_delete().
 */
function MODULE_path_delete($path) {
  // If this is an alias to a node view page
  if (preg_match("/^node\/\d+(\/view)?$/", $path['source'], $matches)) {
    // Delete aliases for the supported suffixes.
    foreach (array('/abstract', '/cover') as $suffix) {
      $new_path = array_merge($path, array(
        'source' =&gt; $matches[0] . $suffix,
        'alias' =&gt; $path['alias'] . $suffix
      ));
      unset($new_path['pid']);
      path_delete($new_path);
    }
  }
}