You can construct a new coordinate system for each face from three vectors: a horizontal (x) and vertical (y) edge of a cube's face and its' face-normal (z).
im not 100% on this part. i can get the normal of each Face and the x and y Vectors no probs but its just trying too envision how i would use these values too create the matrix and then how too apply it too the normals.
You have to create a matrix which transforms the normals from the normal-map (which is defined in the xy-plane) onto your polygon.
If your mesh is using smoothed vertex normals, you've got a different tangent-space matrix for every vertex (because every vertex has a different normal vector):

In the case of a cube it's all a bit simpler because the tangent-plane is equal to the face of the cube and you don't have to interpolate the tangent-vectors across the polygon.
Since you're transforming direction vectors, the translation component of the matrix has no use and you just have to deal with a 3x3 matrix.
So you can simply build one matrix per quad, calculate light- and view-direction for each vertex of the quad, transform both vectors with the inverse matrix into normalmap-space and interpolate the two vectors across your quad.
Now all the math happens in normal-map space, just like in the 2d version.
Inverting the matrix is very simple btw because it's orthonormal (all three vectors are normalized and perpendicular), so you just have to transpose the values:
inverse[x][y] = matrix[y][x]