Issue 1:
This code:

type A end
Base.convert{F}(::Type{A}, x::F, v::Union{F,Vector{F}} = one(F)) = A()

on Julia v0.4.3 gives

julia> convert(A, 0.1)
A()

julia> convert(A, 0.1, 0.2)
A()

julia> convert(A, 0.1, [0.2])
ERROR: MethodError: `convert` has no method matching convert(::Type{A}, ::Float64, ::Array{Float64,1})
This may have arisen from a call to the constructor A(...),
since type constructors fall back to convert methods.
Closest candidates are:
convert{F}(::Type{A}, ::F)
convert{F}(::Type{A}, ::F, ::Union{Array{F,1},F})
call{T}(::Type{T}, ::Any)
...

I would expect that the last call also works. If I define convert(), where F is replaced by Float64, it works.

On v0.5 from the juliabox.org

julia> convert(A, 0.1)
A(Error showing value of type A:
ERROR: MethodError: `one` has no method matching one(::Type{A})
[inlined code] from ./none:1
in Type(Type{Pair{A,B}}, Symbol, A) at ./operators.jl:507
in show_default(Base.#show_default, IOContext{Base.Terminals.TTYTerminal}, Any) at ./show.jl:80
[inlined code] from ./show.jl:73
in showcompact(Base.#showcompact, Base.Terminals.TTYTerminal, A) at ./show.jl:1432
in writemime(Base.Multimedia.#writemime, Base.Terminals.TTYTerminal, MIME{symbol("text/plain")}, A) at ./replutil.jl:4
[inlined code] from ./expr.jl:8
in display(Base.Multimedia.#display, Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, MIME{symbol("text/plain")}, Any) at ./REPL.jl:114
[inlined code] from ./expr.jl:8
in display(Base.Multimedia.#display, Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Any) at ./REPL.jl:117
[inlined code] from ./multimedia.jl:151
in display(Base.Multimedia.#display, Any) at ./multimedia.jl:163
in print_response(Base.REPL.#print_response, Base.Terminals.TTYTerminal, Any, Void, Bool, Bool, Void) at ./REPL.jl:134
in print_response(Base.REPL.#print_response, Base.REPL.LineEditREPL, Any, Void, Bool, Bool) at ./REPL.jl:121
in #18(Base.REPL.##18#19{Bool,Base.#parse_input_line,Base.REPL.LineEditREPL,Base.LineEdit.Prompt}, Base.LineEdit.MIState, Base.AbstractIOBuffer{Array{UInt8,1}}, Bool) at ./REPL.jl:626
in run_interface at ./LineEdit.jl:1611
in run_frontend at ./REPL.jl:859
in run_repl(Base.REPL.#run_repl, Base.REPL.LineEditREPL, Base.##479#480) at ./REPL.jl:167
in _start at ./client.jl:342

julia> convert(A, 0.1, 0.1)
A(Error showing value of type A:
ERROR: MethodError: `one` has no method matching one(::Type{A})
[inlined code] from ./none:1
in Type(Type{Pair{A,B}}, Symbol, A) at ./operators.jl:507
in show_default(Base.#show_default, IOContext{Base.Terminals.TTYTerminal}, Any) at ./show.jl:80
[inlined code] from ./show.jl:73
in showcompact(Base.#showcompact, Base.Terminals.TTYTerminal, A) at ./show.jl:1432
in writemime(Base.Multimedia.#writemime, Base.Terminals.TTYTerminal, MIME{symbol("text/plain")}, A) at ./replutil.jl:4
[inlined code] from ./expr.jl:8
in display(Base.Multimedia.#display, Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, MIME{symbol("text/plain")}, Any) at ./REPL.jl:114
[inlined code] from ./expr.jl:8
in display(Base.Multimedia.#display, Base.REPL.REPLDisplay{Base.REPL.LineEditREPL}, Any) at ./REPL.jl:117
[inlined code] from ./multimedia.jl:151
in display(Base.Multimedia.#display, Any) at ./multimedia.jl:163
in print_response(Base.REPL.#print_response, Base.Terminals.TTYTerminal, Any, Void, Bool, Bool, Void) at ./REPL.jl:134
in print_response(Base.REPL.#print_response, Base.REPL.LineEditREPL, Any, Void, Bool, Bool) at ./REPL.jl:121
in #18(Base.REPL.##18#19{Bool,Base.#parse_input_line,Base.REPL.LineEditREPL,Base.LineEdit.Prompt}, Base.LineEdit.MIState, Base.AbstractIOBuffer{Array{UInt8,1}}, Bool) at ./REPL.jl:626
in run_interface at ./LineEdit.jl:1611
in run_frontend at ./REPL.jl:859
in run_repl(Base.REPL.#run_repl, Base.REPL.LineEditREPL, Base.##479#480) at ./REPL.jl:167
in _start at ./client.jl:342

julia> convert(A, 0.1, [0.1])
ERROR: MethodError: `convert` has no method matching convert(::Type{A}, ::Float64, ::Array{Float64,1})
This may have arisen from a call to the constructor A(...),
since type constructors fall back to convert methods.
Closest candidates are:
convert{F}(::Type{A}, ::F)
convert{F}(::Type{A}, ::F, ::Union{Array{F,1},F})
(::Type{BoundsError})(::ANY, ::ANY)
...
in eval at ./boot.jl:267

Issue 2:
This works:

julia> f(x::Int; y::Union(Symbol, Int)=:foo) = println(y)
# methods for generic function f
f(x::Int64) at none:1

julia> f(1)
foo

julia> f(1, y=:bar)
bar

julia> f(1, y=3)
3

A parametric version instead fails with a cryptic message:

julia> g{T}(x::T; y::Union(Symbol, T)=:foo) = println(y)
# methods for generic function g
g{T}(x::T) at none:1

julia> g(1)
ERROR: no method g#g2(Symbol,Int64)

julia> g(1, y=:bar)
ERROR: no method g#g2(Symbol,Int64)

julia> g(1, y=3)
3

Possibly related, this should be an error but less cryptic and preferrably when the function is defined rather than used.

julia> h(x::Int; y::Int=0.0) = println(y)
# methods for generic function h
h(x::Int64) at none:1

julia> h(1)
ERROR: no method h#g3(Float64,Int64)