En lxml, ¿cómo elimino una etiqueta pero conservo todo el contenido?

El problema es este: tengo un fragmento XML como este:

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

Para el resultado, quiero eliminar todo<a>- y<c>-Etiquetas, pero conservan su contenido (de texto) y los nodos secundarios tal como son. También el<b>-El elemento debe dejarse intacto. El resultado debería verse así

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

Por el momento, volveré a un truco muy sucio: etree.tostring el fragmento, eliminaré las etiquetas ofensivas a través de regex y reemplazaré el fragmento original con el resultado etree.fromstring de esto (no el código real, pero debería ir algo como esto):

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)

Sé que probablemente pueda usar xslt para lograr esto, y sé que lxml puede hacer uso de xslt, pero ¿tiene que haber un enfoque nativo más lxml?

Como referencia: he intentado llegar allí con element.replace de lxml, pero dado que quiero insertar texto donde antes había un nodo de elemento, no creo que pueda hacerlo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta