Attached is the output of a galgebra program that shows the sort of identities you can derive using a general metric tensor (metric tensor where all the entries are the dot products of arbitrary vectors). The code generating the output is:
def check_generalized_BAC_CAB_formulas():
#Print_Function()
g4d = Ga('a b c d e')
(a,b,c,d,e) =
g4d.mv()
gprint('g_{ij} =',g4d.g)
gprint('\\bm{a|(b*c)} =',a|(b*c))
gprint('\\bm{a|(b\\wedge c)} =',a|(b^c))
gprint('\\bm{a|(b\\wedge c\\wedge d)} =',a|(b^c^d))
gprint('\\bm{a|(b\\wedge c)+c|(a\\wedge b)+b|(c\\wedge a)} =',(a|(b^c))+(c|(a^b))+(b|(c^a)))
gprint('\\bm{a*(b\\wedge c)-b*(a\\wedge c)+c*(a\\wedge b)} =',a*(b^c)-b*(a^c)+c*(a^b))
gprint('\\bm{a*(b\\wedge c\\wedge d)-b*(a\\wedge c\\wedge d)+c*(a\\wedge b\\wedge d)-d*(a\\wedge b\\wedge c)} =',a*(b^c^d)-b*(a^c^d)+c*(a^b^d)-d*(a^b^c))
gprint('\\bm{(a\\wedge b)|(c\\wedge d)} =',(a^b)|(c^d))
gprint('\\bm{((a\\wedge b)|c)|d} =',((a^b)|c)|d)
gprint('\\bm{(a\\wedge b)\\times (c\\wedge d)} =',Ga.com(a\\wedge b,c\\wedge d))
gprint('\\bm{(a\\wedge b\\wedge c)(d\\wedge e)} =',((a^b^c)*(d^e)).Fmt(2))
return