Off the top of my head, you can use the line from v2->v1 and the normal to generate the perpendicular vector. If you then normalize that vector and scale it by the length of v2->v1 then that gives you a point that is on the plane defined by the normal N + v2.

I donâ€™t have time to think it all the way though but I suspect that you need to add some testing to ensure that you picked the point that is in the correct direction from v2 along the perpendicular. Also, there are no guarantees that this will generate a point that is contained in the face that you supplied. Note the image below, if you choose v1 and v2 listed below, the perpendicular point cannot fall within the face.

```
import bpy
from mathutils import Vector
def getVert(v1, v2, normal):
v2v1 = v2 - v1
perp = normal.cross(v2v1)
perp.normalize()
perp = perp *v2v1.magnitude
return perp + v2
if __name__ == "__main__":
print(getVert(Vector((0, 0, 0)), Vector((1, 0, 0)), Vector((0, 0, 1))))
```