Blank Page Template for ajax requests
Personally I deal with situations like this in a custom module by registering a path with a callback function that prints the needed content:

function mymodule_menu() {
  $items['somepage/%'] = array(
    'title' =&gt; 'Somepage',
    'page callback' =&gt; 'mymodule_ajax_callback',
    'page arguments' =&gt; array(1),
    'access arguments' =&gt; array('access content'),
    'type' =&gt; MENU_CALLBACK,
  );
  return $items;
}

function mymodule_ajax_callback($nid) {
  if ($node = node_load($nid)) {
    $view = node_view($node, 'full');
    print drupal_render($view);
  }
}


This would get you the view of node 12 without any external markup on 'somepage/12' for example. Note that when you use return instead of print you get the page with additional markup added (just for future reference).

If you want to go with the template approach you could create 2 templates: 'html--blank.tpl.php' and 'page--blank.tpl.php'. The first one should contain only &lt;?php print $page; ?&gt; and the second &lt;?php print render($page['content']); ?&gt;. In your template.php file add:

function mytheme_preprocess_html(&amp;$variables) {
  if (isset($variables['page']['content']['system_main']['nodes'])) {
    $nodes = $variables['page']['content']['system_main']['nodes'];
    $key = key($nodes);
    if (count($nodes) == 2 &amp;&amp; $nodes[$key]['#node']-&gt;type == 'my_content_type') {
      $variables['theme_hook_suggestions'] = array('html__blank');
    }
  }
}

function mytheme_preprocess_page(&amp;$variables) {
  if (isset($variables['node']) &amp;&amp; $variables['node']-&gt;type == 'my_content_type') {
    $variables['theme_hook_suggestions'] = array('page__blank');
  }
}


These solutions will give you a slightly different result, but either should get the job done (just remember to modify them to fit your needs and clear the caches).