¿Cómo imponer position_dodge de ggplot en categorías sin datos?

Estoy tratando de usar position_dodge en ggplot para obtener diagramas de caja de dos señales diferentes (ind) que comparten las mismas categorías (cat). Cuando hay una categoría con datos para una señal pero no para la otra, el diagrama de caja para la señal con datos cubre todo el espaciado horizontal y no respeta la instrucción position_dodge para esa categoría en particular. ¿Hay una manera de hacer ggplot para hacer cumplir la regla de esquivar? Como puede ver en el ejemplo a continuación, la señal x no tiene datos para la categoría B, por lo que pierde el espacio reservado por position_dodge. Me gustaría evitar eso.

Gracias por adelantado.

data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B'), 
                 values=c(3,2,1,4,NA,NA,4,5,6,7,8,9), 
                 ind=c('x','x','x','x','x','x','y','y','y','y','y','y'))

print(ggplot() +
        scale_colour_hue(guide='none') +
      geom_boxplot(
           aes(x=as.factor(cat), y=values, 
               fill=ind), 
           position=position_dodge(width=.60), 
           data=data,
           outlier.size = 1.2,
           na.rm=T))

PROGRESO DE LA ACTUALIZACIÓN

Después de algunas soluciones, encontré el resultado que estaba buscando ... (tipo de)

data            <- data.frame(
cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'), 
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0), 
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))

p  <- ggplot() +
      scale_colour_hue(guide='none') +
      geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
      position=position_dodge(width=.60), 
      data=data,
      outlier.size = 1.2,
      na.rm=T) +
      geom_line(aes(x=x, y=y), 
                data=data.frame(x=c(0,3),y=rep(0,2)), 
                size = 1, 
                col='white')
print(p)

Algunas personas recomendaron el uso de facetado para el efecto que yo quería. El facetado no me da el efecto que estoy buscando. El gráfico final que estaba buscando se muestra a continuación:

Si observa, la marca de verificación principal blanca en y = 10 es más gruesa que las otras marcas de verificación. Esta línea más gruesa es la geom_line con tamaño = 1 que oculta diagramas de caja no deseados.

Ojalá pudiéramos combinar diferentes objetos geom de manera más perfecta. Informé esto como un error en el github de Hadley, pero Hadley dijo que así es como se comporta position_dodge por diseño. Supongo que estoy usando ggplot2 de una manera no estándar y las soluciones son la manera de abordar este tipo de problemas. De todos modos, espero que esto ayude a algunas de las personas de R a impulsar un poco más la funcionalidad de ggplot.

Respuestas a la pregunta(3)

Su respuesta a la pregunta