Me respondo yo mismo, en el tema del execute me faltaba el ciclo para recuperar los datos y devolverlos, finalmente queda así
Código PGSQL:
Ver originalCREATE OR REPLACE FUNCTION BuscarAreas(estado boolean) RETURNS SETOF tbl_area_tematica AS $$
DECLARE
datos tbl_area_tematica%rowtype;
sql TEXT := 'SELECT area_tem_id, area_tem_nombre, area_tem_activa FROM tbl_area_tematica';
sqlEstado TEXT;
BEGIN
IF ( estado<>NULL ) THEN
sql = sql || ' WHERE area_tem_activa=$1';
END IF;
FOR datos IN EXECUTE sql USING estado LOOP
RETURN NEXT datos;
END LOOP;
RETURN;
END
$$ LANGUAGE plpgsql VOLATILE;
Por si a alguien le sirve.
Saludos