Create fields programmatically via content type settings
Thanks Clive, I ended up using the following code to set and get the config settings.

function module_name_form_node_type_form_alter(&amp;$form)
{
    //get node type
    $bundle = $form['type']['#default_value'];
    $node_type = NodeType::load($bundle);

    //create vertical tab
    $form['new_option'] = array(
        '#type' =&gt; 'details',
        '#title' =&gt; t('New option'),
        '#group' =&gt; 'additional_settings',
    );

    //add checkbox to vertical tab
    $form['new_option']['new_option_options'] = array(
        '#type' =&gt; 'checkbox',
        '#title' =&gt; t('New option checkbox'),
        '#collapsible' =&gt; TRUE,
        '#collapsed' =&gt; TRUE,
        '#weight' =&gt; 10,
        '#default_value' =&gt; $node_type-&gt;getThirdPartySetting('new_option','new_option_options'),
    );

    //create submit handler
    $form['actions']['submit']['#submit'][] = 'module_name_form_submit';
}

function module_name_form_submit(&amp;$form)
{
    //get node type
    $bundle = $form['type']['#default_value'];
    $node_type = NodeType::load($bundle);

    //set checkbox value to config and save
    $node_type-&gt;setThirdPartySetting('new_option','new_option_options',$form['new_option']['new_option_options']['#value']);
    $node_type-&gt;save();

   //enable/disable fields
}