Few more alternatives:
{#, d} & /@ {a, b, c}
Tuples[{{a, b, c}, {d}}]
Join[{#}, {d}] & /@ {a, b, c}
Table[{i, d}, {i, {a, b, c}}]
Append[{#}, d] & /@ {a, b, c}
Prepend[{d}, #] & /@ {a, b, c}
Riffle[{#}, {d}] & /@ {a, b, c}
Distribute[{{a, b, c}, d}, List]
Insert[{#}, d, -1] & /@ {a, b, c}
Replace[{a, b, c}, x_ :> {x, d}, 1]
PadRight[List /@ {a, b, c}, {3, 2}, d]
ArrayPad[List /@ {a, b, c}, {0, {0, 1}}, d]
Partition[Riffle[{a, b, c}, d, {2, -1, 2}], 2]
Transpose[{{a, b, c}, ConstantArray[d, {3}]}]
Transpose[{{a, b, c}, Table[d, {3}]}]
Timings:
f1[lst_, elem_] := Map[{#, elem} &, lst]
f2[lst_, elem_] := Tuples[{lst, {elem}}]
f3[lst_, elem_] := Thread[{lst, elem}]
f4[lst_, elem_] := Join[{#}, {elem}] & /@ lst
f5[lst_, elem_] := Table[{i, elem}, {i, lst}]
f6[lst_, elem_] := Append[{#}, elem] & /@ lst
f7[lst_, elem_] := Prepend[{elem}, #] & /@ lst
f8[lst_, elem_] := Riffle[{#}, {elem}] & /@ lst
f9[lst_, elem_] := Distribute[{lst, elem}, List]
f10[lst_, elem_] := Insert[{#}, elem, -1] & /@ lst
f11[lst_, elem_] := Replace[lst, x_ :> {x, elem}, 1]
f12[lst_, elem_] := PadRight[List /@ lst, {Length@lst, 2}, elem]
f13[lst_, elem_] := ArrayPad[List /@ lst, {0, {0, 1}}, elem]
f14[lst_, elem_] := Partition[Riffle[lst, elem, {2, -1, 2}], 2]
f15[lst_, elem_] := Transpose[{lst, ConstantArray[elem, {Length@lst}]}]
f16[lst_, elem_] := Transpose[{lst, Table[elem, {Length@lst}]}]
funcs = {f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16};
labels = ToString /@ {Map, Tuples, Thread, Join, Table, Append,
Prepend, Riffle, Distribute, Insert, Replace, PadRight, ArrayPad,
Partition, TransposeConstantArray, TransposeTable};
res = ConstantArray[0, {16}];
testdata = RandomInteger[10, {10000000}];
Grid[Table[{i, labels[[i]], First@Timing[res[[i]] = funcs[[i]][testdata, 20];]},
{i, Range[16]}],
Dividers -> All]

And@@(res[[1]] == # & /@ Rest[res])
(* True *)