Otra opción podría ser sobrecargar el método y crear dos llamadas diferentes con diferentes parámetros (si es que es muy común llamarla con ese parámetro relleno y el resto de los opcionesles no).
Código Delphi
[-]
procedure X.opcionales(x1 : Integer; x2 : String;
x3 : String; x4 : String;
x5 : String; x6 : String;
x7 : String = '000000000000';
x8 : String = '00000000';
x9 : String = '000000';
x10 : String = '000000'); overload;
procedure X.opcionales(x1 : Integer; x2 : String;
x3 : String; x4 : String;
x5 : String; x6 : String;
x9 : String = '000000'
); overload;
La segunda llamada, llamaría a la primera rellenando el resto de parámetros opcionales.
Sólo le veo utilidad en el caso que he comentado de que la llamada con el parámetro X9 rellenado y el resto de opcioneles vacíos
sea muy habitual.