Tu problema es muy especifico y no tengo como detectar que es lo que quieres.
lo que pensé que requerias cuando me dijsite que la función llamada con *FROM te retornaba bien era esto
Código SQL:
Ver originalpruebas=> CREATE OR REPLACE FUNCTION obtenerempleados() RETURNS SETOF empleado AS
pruebas-> $BODY$
pruebas$> DECLARE
pruebas$> r empleado%rowtype;
pruebas$> BEGIN
pruebas$> FOR r IN SELECT * FROM empleado
pruebas$> LOOP
pruebas$> RETURN NEXT r;
pruebas$> END LOOP;
pruebas$> RETURN;
pruebas$> END
pruebas$> $BODY$
pruebas-> LANGUAGE 'plpgsql' ;
CREATE FUNCTION
pruebas=> SELECT *FROM obtenerempleados();
id | nombre | telefono
----+--------+----------
3 | monica | 8890208
(1 fila)
pruebas=> SELECT id AS codigo,nombre AS "Nombre Persona"
pruebas->FROM (SELECT *FROM obtenerempleados()) AS tabla_resultante;
codigo | Nombre Persona
--------+----------------
3 | monica
(1 fila)
si tu función llamada con *FROM funciona bien, este metodo no debería traerte problemas.