¿Cómo se puede reemplazar un elemento con texto en lxml?

Es fácil eliminar por completo un elemento dado de un documento XML con la implementación de lxml de la API ElementTree, pero no veo una manera fácil de reemplazar constantemente un elemento con algún texto. Por ejemplo, dada la siguiente entrada:

input = '''<everything>
<m>Some text before <r/></m>
<m><r/> and some text after.</m>
<m><r/></m>
<m>Text before <r/> and after</m>
<m><b/> Text after a sibling <r/> Text before a sibling<b/></m>
</everything>
'''

... podrías eliminar fácilmente cada<r> elemento con:

from lxml import etree
f = etree.fromstring(data)
for r in f.xpath('//r'):
    r.getparent().remove(r)
print etree.tostring(f, pretty_print=True)

in embargo, ¿cómo haría para reemplazar cada elemento con texto para obtener el resultado:

<everything>
<m>Some text before DELETED</m>
<m>DELETED and some text after.</m>
<m>DELETED</m>
<m>Text before DELETED and after</m>
<m><b/>Text after a sibling DELETED Text before a sibling<b/></m>
</everything>

Me parece que porque la API ElementTree trata el texto a través de la.text y.tail atributos de cada elemento en lugar de nodos en el árbol, esto significa que tiene que lidiar con muchos casos diferentes dependiendo de si el elemento tiene elementos hermanos o no, si el elemento existente tenía un.tail atributo, y así sucesivamente. ¿Me he perdido alguna forma fácil de hacer esto?

Respuestas a la pregunta(3)

Su respuesta a la pregunta