How can I setup automatic subpages for existing pages using a view with a contextual filter that uses the URL to determine the filter value?
After much trial and error, I found a solution that seems to work for me.

The first thing I had to do was switch from using a "provide default filter value" to specifying custom validation criteria via PHP:

$normalPath = drupal_get_normal_path('expertise/' . $argument);
$urlPieces = explode('/', $normalPath);

if(!isset($urlPieces[1]))
{
    return false;
}

$nodeId = $urlPieces[1];
$node = node_load($nodeId);

if(!empty($node))
{
    switch($node-&gt;type)
    {
        case 'area_of_expertise':
            $handler-&gt;argument = $node-&gt;nid;
            return true;
    }
}

return false;


Thanks to Cameron for the bits about $argument and $handler-&gt;argument.

Once I figured out how to use argument to generate the URL which then allowed me to look-up the node ID, I was able to reuse most of the code that I had before in the "Provide Default Value" section.

The next issue was the breadcrumbs. Before I did anything extra, the breadcrumbs were showing as Home &gt;   &gt; Staff. I ended up having to create a new menu item called Staff in the main menu that was a child of Pathology. So then the breadcrumbs showed as Home &gt; Pathology &gt; Staff &gt; Staff which is still not what I wanted.

I found out that views likes to add each contextual filter as a breadcrumb so that you can navigate up and get less and less granular. Normally this would be a nice feature, but I couldn't see any way to turn it off.

So I found a post that detailed how to remove the breadcrumbs which I tried to implement via hook_preprocess_page. This ended up not affecting the breadcrumbs at all because the views module was altering the breadcrumbs after that hook was being run.

Then I found another post that detailed how to affect the breadcrumbs after the view was ready to be rendered using hook_views_pre_render.

So I have the following code as my hook:

function MODULE_views_pre_render(&amp;$vars)
{
    $page = menu_get_item();

    if(($page['page_callback'] == 'views_page') &amp;&amp; ($page['page_arguments'][0] == 'staff_cross_reference'))
    {
        $breadcrumbs = drupal_get_breadcrumb();
        array_pop($breadcrumbs);
        drupal_set_breadcrumb($breadcrumbs);
    }
}


And now my breadcrumbs look like Home &gt; Pathology &gt; Staff which is exactly what I want!