What is the purpose of the "demo" version there? Wouldn't it be easier to have a separate "demo" controller? You could then simply define the default for the domains as:
routers = dict( BASE = dict( domains = {"domain.com":"app", "demo.domain.com":"app/demo/index"}, default_application = 'app', default_controller = 'org', default_function = 'index' ) )