This might be trickier than I was hoping, but the idea is to import every sub `Rakefile` into a namespace in the main process.

    FileList[ "*/Rakefile", "*/*/Rakefile" ].map do |rakefile|
      namespace name do
        load rakefile
      end 
    end

If the path is mapped to a shortened name, then the user would see the project in `support/client` (or wherever) referred to as `client`, for example.

The main tasks would have actual dependencies on the sub-project tasks. That's similar to the current setup, but the sub tasks would be the actual tasks instead of made-up tasks that invoke rake again. Since the main rake wouldn't blindly call other rakes, the sub projects wouldn't need to define extra, empty tasks just to satisfy the outer project. The outer project would also have direct access to tasks inside the sub projects if it needed them.

The outer project should create a task for each sub project that points to the sub project's default task. `rake client` then would go to the client sub project and do its `rake`. `rake client:build`, etc. would be the same as `rake build` in the client project.

It would look something like this (just showing the `client` project and the `build` task for simplicity).

    $ rake --tasks
    rake build                   # 
    rake client                  # Build the minified client and client documentation.
    rake client:build            # Run the RequireJS optimizer.
    rake client:compile          # Compile.
    rake client:compress         # Compress.
    rake client:default          # Build the minified client and client documentation.
    rake client:documentation    # Generate the jsdoc documentation.
    rake client:full             # Null Tasks

    $ rake --prereqs 
    rake build
        public:build
        builds:build
        client:build
        proxy:build
    rake client
        client:default
    rake client:build
        clean
        compile
        compress
        documentation
    rake client:compile
        build.js
    rake client:compress
        build.js
    rake client:default
        build
    rake client:documentation
    rake client:full
    rake client:web

There are a few problems that we would need to work out:

* File tasks don't go in the namespace, so any file targets in the sub projects appear as top-level tasks.
* The current directory still needs to change to the sub project before running one of its tasks. I'm not sure if there's a way to patch the task runner to do this without having to make the sub project responsible.
* There are some conflicts between resources included shared by the different Rakefiles, such as `utility.rake`.
* If the `clean` and `clobber` targets are generated using `require "rake/clean"`, they aren't created in time for the outer project to discover them and link to them.