So I'm not sure if there's a trivial way to do this, but it's all easy enough to compute (caveat emptor: it could be slow). Basically we'll just determine what the left and bottom WindowMargins will have to be to put a point anc at a point pt in our new dialog.
First we need a basic function to compute scaled window positions (even though it's long it's really a boring, simple function). It uses the trueWindowSize from this answer.
scaledNotebookPositions // Clear
scaledNotebookPositions[
nb_NotebookObject,
point : {_, _} | Automatic : Automatic
] :=
Module[{
ws = trueWindowSize[nb],
pt = Replace[point, Automatic :> {Center, Center}]
},
Floor /@ {
Replace[
Replace[pt[[1]],
{Center :> Scaled[.5], Left :> Scaled[0], Right :> Scaled[1]}
],
{
Scaled[i_?NumericQ] :> ws[[1]]*i,
i_?NumericQ :>
ws[[1]]/2 + i,
_ :> ws[[1]]/2
}
],
Replace[
Replace[pt[[2]],
{Center :> Scaled[.5], Bottom :> Scaled[0], Top :> Scaled[1]}
],
{
Scaled[i_?NumericQ] :> ws[[2]]*i,
i_?NumericQ :>
ws[[2]]/2 + i,
_ :> ws[[2]]/2
}
]
}
]
Then a function to align a point in the dialog with a point in the original notebook:
positionedDialog // Clear
positionedDialog[
parent_NotebookObject,
dialog_Notebook,
point : {_, _} | Automatic : Automatic,
anchor : {_, _} | Automatic : Automatic,
return : True | False : False
] :=
Module[{
marg = {#[[1]], Automatic} & /@
AbsoluteCurrentValue[parent, WindowMargins],
dia = CreateDocument[dialog, Visible -> False,
System`DynamicUpdating -> False],
pt, anc
},
pt = scaledNotebookPositions[parent, point];
anc = scaledNotebookPositions[dia, anchor];
marg =
MapThread[
ReplacePart[#, 1 -> #[[1]] + #2 - #3] &,
{marg, pt, anc}
];
If[! return,
SetOptions[dia, {
WindowMargins -> marg,
WindowFloating -> True,
Visible -> Lookup[Options[dialog], Visible, True],
System`DynamicUpdating ->
Lookup[Options[dialog], System`DynamicUpdating, True]
}];
SetOptions[dia,
WindowFloating -> False
];,
NotebookClose[dia];
Insert[dialog,
WindowMargins -> marg,
2
]
]
]
And here's a basic test case:
$dialog =
CloudImport@
CloudObject[
"https://www.wolframcloud.com/objects/b3m2a1/banner-dialog-example.nb"];
(* If that fails use this *)
$dialog =
Notebook[{},
WindowSize -> {300, 350},
StyleDefinitions -> "Palette.nb",
System`ClosingSaveDialog -> False
];
And here's our test case:
positionedDialog[EvaluationNotebook[],
$dialog
]

And here's another, with a different alignment:
positionedDialog[EvaluationNotebook[],
$dialog,
{Right, Top},
{Scaled[.65], Top}
]

Here's an example where you simply pull out the WindowSize and WindowMargins options from positionedDialog and pass them to a different function:
ChoiceDialog["Pick",
{},
Options[
positionedDialog[EvaluationNotebook[],
Notebook[{},
WindowSize -> {350, 100}
],
True
],
{
WindowMargins,
WindowSize
}
]
]

Note that I supplied a WindowSize for the ChoiceDialog implicitly in that Notebook: i.e.
Notebook[{},
WindowSize -> {350, 100}
]
For dialogs that supply some minimum size (think ChoiceDialog, MessageDialog) this type of thing is necessary.