I have look throughout for any solution, i am not adequate enough myself to code it, but maybe someone after some more understanding in PHP might have the ability to assist me to.

I essentially need to produce a custom publish enter in the admin panel whenever a client adds a brand new top level menu link. Is possible?

i've only the fundamental code

function create_casestudies() {

$labels = array (
    'name' => __('Case Studies'),
    'singular_label' => __('Case Study'),
    'add_new' => __('Add New Case Study'),
    'add_new_item' => __('Add New Case Study'), 
    'edit' => __( 'Edit' ),
    'edit_item' => __( 'Edit Case Study' ),
    'new_item' => __( 'New Case Study' ),
    'view' => __( 'View Inspiration' ),
    'view_item' => __( 'View Case Study' ),
    'search_items' => __( 'Search Case Studies' ),
    'not_found' => __( 'No Case Studies found' ),
    'not_found_in_trash' => __( 'No Case Studies found in Trash' ),
    'parent' => __( 'Parent Case Studies' ),    
);

register_post_type(
    'casestudies',
    array( 
        'labels' => $labels,
        'public' => true,
        'show_ui' => true, 
        'capability_type' => 'post', 
        'menu_position' => 6,  
        'rewrite' => array('slug' => 'casestudy'),
        'supports' => array('title', 'editor', 'thumbnail')

    )
);
}   add_action('init', 'create_casestudies');

i am presuming this could necessary edited to ascertain if a high level nav is available and when it will, produce a custom publish type with individuals paramaters

Must you create custom publish types as user adds top level menu link? Or just one custom publish type?

If it is undefined quantity of CPTS, maybe it is recommended to to keep these questions wordpress plugin_option or theme option, so when user adds another top level food selection you give a new item for you BD. Your init function will loop this array creating CPTs quickly (and them produced because it operates on init).

If it is just one CPT it's way simpler, just give a option that stores whether it should or should not run your function!

Hope this can help!