Mosaik Layouts definition is as simple as hook_theme implementation.
To define a layout we have to implement hook_mosaik_layout($path).
See example below:

/**
 * Implements hook_mosaik_layout().
 */
function my_module_mosaik_layout($path) {
  return array(
    'administrative' => array(
      'template' => 'administrative',
      'variables' => array(
        MOSAIK_REGION_TOP => NULL,
        MOSAIK_REGION_LEFT => NULL,
        MOSAIK_REGION_RIGHT => NULL,
      ),
      'path' => $path . '/layouts'
    ),
    'full_width' => array(
      'template' => 'full_width',
      'variables' => array(
        MOSAIK_REGION_CONTENT => NULL,
      ),
      'path' => $path . '/layouts'
    ),
    'three_columns' => array(
      'template' => 'three_columns',
      'variables' => array(
        MOSAIK_REGION_LEFT => NULL,
        MOSAIK_REGION_CONTENT => NULL,
        MOSAIK_REGION_RIGHT => NULL
      ),
      'path' => $path . '/layouts'
    ),
  );
}

This hook accepts as argument the $path to the module who invoked it (eg: sites/all/modules/custom/my_module), so you don't need to extract it by yourself.
When you define a layout, Mosaik will automatically search for css and js files with the same name of the layout machine name into the layout folder (specified with the "path" option), including them when rendering the mosaik.
In this way you can create specific CSS and JS for your layouts that will be loaded only if necessary.

Return value of this hook consists into an array of mosaik layouts. Each mosaik layout has a key corresponding to the layout machine name.
The corresponding array value is an associative array that may contain the following key-value pairs:

  • template: Required. The name of the template file without an extension. Do not put .tpl.php on this file; that extension will be added automatically by the default rendering engine (which is PHPTemplate). If 'path', below, is specified, the layout file should also be in this path.
  • variables: Required. Each array key is the name of the region variable, and the value given is used as the default value if the rendering function does not supply it.
  • path: Override the path of the file to be used. Ordinarily the module or theme path will be used, but if the file will not be in the default path, include it here. This path should be relative to the Drupal root directory.

Now let see how a layout file is made (this is the content of the three_regions layout defined by Mosaik module):

<?php
/**
 * @file
 * three_regions.tpl.php
 *
 * Three regions Mosaik layout.
 * It provides the following region variables:
 * - $top
 * - $content
 * - $right
 */
?>
<div id="mosaik-layout-three-regions">
  <div id="top-region" class="mosaik-region">
    <div class="mosaik-content-wrapper">
      <?php print $top ?>
    </div>
  </div>
  <div id="wrapper">
    <div id="content-region" class="mosaik-region">
      <div class="mosaik-content-wrapper">
        <?php print $content ?>
      </div>
    </div>
    <div id="right-region" class="mosaik-region">
      <div class="mosaik-content-wrapper">
        <?php print $right ?>
      </div>
    </div>
    <div class="clearfix"></div>
  </div>
</div>

As you can see there's nothing more or less in a Mosaik layout if compared to a page.tpl.php file or any other drupal templates.
The only difference is that you have to print and not render() the value of the region variables.
And that's all about layouts.