Say I have the following grammar:
$$S \to \epsilon \mid [S] \mid (S) \mid SS$$
This grammar is ambiguous as both the following parse trees yield the empty string
$$S \to \epsilon$$
$$S \to SS \to (S \to \epsilon) + (S \to \epsilon) = \epsilon$$
My question is basically can I still build a PDA for this language even though its ambiguous? And if not is it ever possible to build a PDA that can recognize an ambiguous CFG or is it always impossible?
The languages recognized by non-deterministic PDAs are precisely the context-free languages, so the answer is yes for them. In this case you can even do it with a deterministic PDA: essentially all you need to do is push left brackets onto the stack and pop the top of the stack when you read a right bracket, if the top of the stack is the same kind of bracket as the input.