Saving a serialized data Array as a property on a custom Entity (D7)

Doing some initial prototyping work on the Comstack module I hit this question without a clear answer. For clarity here's a chunk of the schema structure for a Message Type (exportable entity).

/**
* Implements hook_schema().
*/
function comstack_schema() {
  $schema = array();

  $schema['comstack_message_type'] = array(
    'description' => 'Stores information about all defined {comstack_message} types.',
    'fields' => array(
      'id' => array(
        'type' => 'serial',
        'not null' => TRUE,
        'description' => 'Primary Key: Unique {comstack_message} type ID.',
      ),
    ...
    'delivery_methods' => array(
        'type' => 'text',
        'not null' => FALSE,
        'size' => 'big',
        'serialize' => TRUE,
        'description' => 'A serialized array of allowed send methods for this type.',
      ),

Following the instructions on how to create an exportable Entity as over here on d.o https://www.drupal.org/node/1021526 and here https://www.drupal.org/node/1021576

The second link has the following code which is the submit process where the form values are wrapped up and a new entity put together for you before saving.

/**
* Form API submit callback for the type form.
*/
function profile2_type_form_submit(&$form, &$form_state) {
  $profile_type = entity_ui_form_submit_build_entity($form, $form_state);
  ...

So how do we construct a form which will allow for arbitrary array structures? Like this (in your form function)!

  $form['delivery_methods'] = array(
    '#title' => t('Delivery methods to allow'),
    '#type' => 'checkboxes',
    '#required' => TRUE,
    '#options' => $delivery_methods,
    '#default_value' => isset($comstack_message_type->delivery_methods) ? $comstack_message_type->delivery_methods : array(),
    '#tree' => TRUE,
  );

It's the #tree bit there that does it. Here's an explanation from the Form API documentation page which is marked as archived but still useful https://www.drupal.org/node/48643.

When we set fieldset value to TRUE we create the form:

<?php
$form['colors'] = array(
'#type' => 'fieldset',
'#title' => t('Choose a color'),
'#collapsible' => FALSE,
'#tree' => TRUE,
);
$form['colors']['green'] = array(
'#type' => 'checkbox',
'#title' => t('Green'),
'#default_value' => $node->green,
'#required' => FALSE,
);

and this is how they are inserted or updated in a db_query:

<?php
function example_insert($node){
  db_query("INSERT INTO {example} (nid, question, green, blue) VALUES (%d,'%s', %d, %d)", $node->nid, $node->title, $node->colors['green'], $node->colors['blue']);
}

Any questions? Leave them in the comments :]