Para empezar, es igual que un módulo custom de Drupal, ni que decir tiene que necesitamos tener instalado Drush, bien sea local o global. Y comenzamos...
Creamos un directorio con el nombre de nuestra batería de comandos custom dentro de nuestro directorio raíz de Drupal /modules/custom/nombre_bateria_comandos

Necesitamos 2 archivos base para empezar, "nombre_bateria_comandos.info.yml" y drush.services.yml
Para el archivo nombre_bateria_comandos.info.yml:

name: Custom commands
type: module
description: Comandos de drush Custom
core: 8.x
package: CustomCommands
(Yo os adjunto un ejemplo, ajustadlo como vosotros lo necesitéis)
Para el archivo drush.services.yml:

services:
custom_commands.commands:
class: \Drupal\custom_commands\Commands\CustomCommands
tags:
- { name: drush.command }
Luego dentro de un directorio llamado "src" al nivel de los archivos anteriores, creamos el archivo que contendrá la clase para nuestra batería de comandos, en mi caso es "CustomCommands.php":

<?php
namespace Drupal\custom_commands\Commands;
use Drush\Commands\DrushCommands;
/**
* A Drush commandfile.
*
* In addition to this file, you need a drush.services.yml
* in root of your module, and a composer.json file that provides the name
* of the services file to use.
*
* See these files for an example of injecting Drupal services:
* - http://cgit.drupalcode.org/devel/tree/src/Commands/DevelCommands.php
* - http://cgit.drupalcode.org/devel/tree/drush.services.yml
*/
class CustomCommands extends DrushCommands {
/**
* Comando de ejemplo
* Aquí ya lo que necesitéis, llamadas a BD transformaciones etc...
*
* @command custom-commands:mycommand
*/
public function mycommand() {
$this->io()->writeln("Hola soy el nuevo comando custom!!!!");
}
}
Con esto ya podemos probar, si necesitamos más comandos, solo hay que replicar la estructura de la función previa y crear más funciones con su "@command" correspondiente, y listo.
solo nos queda borrar cache, activar nuestro modulo, y ejecutarlo:

;) LISTO!!!