Como impor o position_dodge de ggplot em categorias sem dados?

Eu estou tentando usar position_dodge no ggplot para obter boxplots de dois sinais diferentes (ind) compartilhando as mesmas categorias (cat). Quando há uma categoria com dados para um sinal, mas não para o outro, o boxplot para o sinal com dados cobre todo o espaçamento horizontal e não respeita a instrução position_dodge para aquela categoria em particular. Existe uma maneira de fazer ggplot para impor a regra de esquiva? Como você pode ver no exemplo abaixo, o sinal x não tem dados para a categoria B, então perde o espaço reservado por position_dodge. Eu gostaria de evitar isso.

Desde já, obrigado.

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))

ATUALIZAÇÃO DO PROGRESSO

Depois de algumas soluções, eu tive o resultado que eu estava procurando ... (meio que)

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)

Algumas pessoas recomendaram o uso de lapidação para o efeito que eu queria. Faceting não me dá o efeito que estou procurando. O gráfico final que eu estava procurando é mostrado abaixo:

Se você notar, a marca de escala branca maior em y = 10 é mais espessa do que as outras marcas de escala. Essa linha mais espessa é a geom_line com size = 1, que oculta os boxplots indesejados.

Eu gostaria que pudéssemos combinar diferentes objetos geométricos mais facilmente. Eu relatei isso como um bug no github de Hadley, mas Hadley disse que é assim que o position_dodge se comporta pelo design. Eu acho que estou usando o ggplot2 de uma maneira não padronizada e as soluções alternativas são o caminho a seguir nesses tipos de problemas. De qualquer forma, espero que isso ajude alguns dos Rs a empurrar um pouco mais a grande funcionalidade do ggplot.

questionAnswers(3)

yourAnswerToTheQuestion