drush inheritance, site-ssh and site-list
The problem here is that Drush will always prefer the non-empty 'site-list' in @production over any empty value you provide in the specific site aliases.  This is regrettable, as it makes it Hard to delete values.

There are a couple of alternatives, though.  The most straightforward solution is to just take advantage of the fact that Drush alias files are executable php.  You can refactor your alias definitions like this:

&lt;?php
$common = array (
  'root' =&gt; '/var/www/cust',
  'uri' =&gt; 'www.example.com',
  'databases' =&gt; array(
    'default' =&gt; array(
      'default' =&gt; array(
        'database' =&gt; '...',
        'username' =&gt; '...',
        'password' =&gt; '...',
        'host' =&gt; '...',
        'port' =&gt; '3306',
        'driver' =&gt; 'mysql',
      ),
    ),
  ),
);
$aliases['production'] = array (
  'site-list' =&gt; array(
    'production.1',
    'production.2',
    'production.3',
    'production.4',
  ),
);
$aliases['production.1'] = array (
  'remote-host' =&gt; '...',
) + $common;
$aliases['production.2'] = array (
  'remote-host' =&gt; '...',
) + $common;
$aliases['production.3'] = array (
  'remote-host' =&gt; '...',
) + $common;
$aliases['production.4'] = array (
  'remote-host' =&gt; '...',
) + $common;


Your second option is to take advantage of a Drush feature that automatically creates group aliases for all aliases that are defined in a single alias file.  Start with your alias file definition as you show it in the question above; then:

1) Delete 'site-list' from the 'production' alias.

2) Move the 'production' alias to a different file (I use servers.aliases.drushrc.php to store aliases to all of the servers that I have sites on).

3) Keep the individual site aliases as they are, with 'parent' =&gt; '@server.production'.

Once you have done that, you may use @cust as an alias list for all of the aliases defined in cust.aliases.drushrc.php.