No lxml, como faço para remover uma tag, mas reter todo o conteúdo?

O problema é este: eu tenho um fragmento XML como este:

<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>

Para o resultado, quero remover todos<a>- e<c>-Tags, mas mantém seus conteúdos (texto) e nós filhos exatamente como são. Também o<b>-O elemento deve ser deixado intocado. O resultado deve parecer assim

<fragment>text1 inner<d>1</d> text2 <b>inner2</b> text3</fragment>

Por enquanto, vou reverter para um truque muito sujo: vou etree.tostring o fragmento, removerei as tags incorretas via regex e substituirei o fragmento original pelo resultado etree.fromstring (não o código real, mas deve ser algo como isto):

from lxml import etree
fragment = etree.fromstring("<fragment>text1 <a>inner1 </a>text2 <b>inner2</b> <c>t</c>ext3</fragment>")
fstring = etree.tostring(fragment)
fstring = fstring.replace("<a>","")
fstring = fstring.replace("</a>","")
fstring = fstring.replace("<c>","")
fstring = fstring.replace("</c>","")
fragment = etree.fromstring(fstring)

Sei que provavelmente posso usar o xslt para conseguir isso e sei que o lxml pode fazer uso do xslt, mas é preciso haver uma abordagem nativa mais lxml?

Para referência: tentei chegar lá com o element.replace do lxml, mas como quero inserir texto onde havia um nó de elemento antes, acho que não posso fazer isso.