Hi, see if this works
Basically you need to compute the transformation matrix that represents the rotation from a specific point ("vertex" in your case). That can be generally done by matrix composition.... m1*m2-1*transform*m2. Where m1 is the matrix of the object you want to move, m2-1 is the inverse matrix of the object you want to use as reference (parent space), transform is your rotation matrix, then you move it back to world by multiplying back m2.
A quick example in maya can look like this:
from maya.api import OpenMaya
from maya import cmds
cube = cmds.polyCube()[0]
vtx = cube+'.vtx[2]'
vtx_pos = cmds.xform(vtx, q=1,ws=1,t=1)
# vertex does not have orientation, so will keep world
# you can use vertex normals or custom...
# ill just extract the position
vtx_world_mmat = OpenMaya.MMatrix()
for i in xrange(3):
vtx_world_mmat.setElement(3,i, vtx_pos[i])
grp = cmds.createNode('transform')
cmds.xform(grp, t=(5,0,0))
obj = cmds.polyPrism()[0]
cmds.parent(obj,grp,r=1)
obj_world_mat = cmds.xform(obj, q=1,ws=1,m=1)
# compose the rotation matrix however you want, ill just make from euler rotation
rot_eu = OpenMaya.MEulerRotation()
rot_eu.y=3.1415*.5 # 90 deg (ish)
rot_mmat = rot_eu.asMatrix()
obj_world_mmat = OpenMaya.MMatrix(obj_world_mat)
# transform
resulting_mmat = obj_world_mmat * vtx_world_mmat.inverse() * rot_mmat * vtx_world_mmat
# rotate
cmds.xform(obj, ws=1, m=list(resulting_mmat))
If I understood you correctly this should be it.
Cheers.