What is the best method to customize the display of author information on a node of a certain type? Requirements: For nodes of a certain type (blog), I need to show the author information with the author image using a specific Image Style, the user name, the user profile description, and another custom user field.

The method I'm currently using is implementing theme_preprocess_node() to create a variable to pass to my node--blog.tpl.php file that includes the elements I need themed. This means I have calls to theme_image_style() in my theme_preprocess_node() function.

Is this the best method, or is there a "more Drupal" approach I'm missing?

If it helps, here is a snippet of code:

/**
 * Hook theme_preprocess_node
 */
function hotness_preprocess_node(&amp;$vars) {  
  // for blog posts, style date and show intro image
  $node = $vars['node'];
  if($node-&gt;type == 'blog') {
    // nice date
    $vars['date'] = format_date($node-&gt;created, 'custom', 'F j, Y');

    // use image style for blog image
    $vars['blog_image'] = NULL;
    $blog_image = isset($node-&gt;field_blog_image['und'][0]) ? $node-&gt;field_blog_image['und'][0] : FALSE;
    if($blog_image) {
      $vars['blog_image'] = theme_image_style(array(
        'style_name' =&gt; 'introduction-image',
        'path' =&gt; $blog_image['uri'],
        'width' =&gt; $blog_image['width'],
        'height' =&gt; $blog_image['height'],
        'alt' =&gt; $blog_image['title'], // to make it easier to the end user I just show title
        'title' =&gt; $blog_image['title'],
         'attributes' =&gt; array('class' =&gt; 'blog-image')
      ));
    }

// I use user_load() because the node object doesn't have the user description.
$author = user_load($node-&gt;uid);

$author_image = '';
if(isset($author-&gt;picture-&gt;uri) &amp;&amp; !empty($author-&gt;picture-&gt;uri)) {
  $author_image = theme_image_style(array(
    'style_name' =&gt; 'blog-author-image',
    'path' =&gt; $node-&gt;picture-&gt;uri,
    'width' =&gt; NULL,
    'height' =&gt; NULL,
    'alt' =&gt; t('User .') . $node-&gt;name,
    'title' =&gt; t('User ') . $node-&gt;name,
    'attributes' =&gt; array('class' =&gt; array('author-image')),
  ));
}

$author_name = l($node-&gt;name, 'user/' . $node-&gt;uid);
$author_desc = isset($author-&gt;field_description['und'][0]['safe_value']) ? 
  '&lt;div class="author-description"&gt;' . $author-&gt;field_description['und'][0]['safe_value'] . '&lt;/div&gt;': '';

// put it all together
$vars['author_block'] = $author_image . $author_name . $author_desc;


}
}
In your code at

 $node-&gt;field_blog_image['und'][0]


this is still an array so you need to access the value of the field one more level deep in to that array you can access it as follows.

$node-&gt;field_blog_image['und'][0]['safe_value']


Rest of code looks good to me.